2017-09-25 4 views
-1

여러 개의 파일이있는 폴더가 여러 개 있습니다. "_partN"접두어가 저장된 파일이있는 폴더와 같은 이름으로 파일의 이름을 바꿔야합니다. 예를 들어단일 Linux 명령 os 스크립트에서 조건에 따라 여러 폴더에있는 모든 파일의 이름을 바꿉니다.

,

나는이 개 파일이 "new_folder_for_upload"라는 이름의 폴더가 있습니다. 나는

new_folder_for_upload_part1 new_folder_for_upload_part2

내가 여러 파일을 같은 어떤 이상 많은 폴더가 같이이 두 파일의 이름을 변환해야합니다. 위에서 설명한대로 모든 파일 이름을 변환해야합니다.

사람은 자동으로이 일을 할 수있는 하나의 리눅스 명령 또는 스크립트 찾아 나를 도와 드릴까요?

+0

파일의 원래 이름은 무엇입니까 :

빈 하위 디렉토리를 삭제하려면? 'part1'과'part2', 혹시 그들을 열거해야합니까? – DevSolar

+0

하위 폴더에 이름이 바뀐 파일이 필요하거나 최상위 디렉토리에 모두 이름이 필요합니까? 같은 파일의 – DevSolar

+0

샘플 : 나는 부모 디렉토리 이름과 "_partN"로 파일 이름을 변경해야 FineHowardMD_1490040273_tab17.pdf HowardFineMD_1463582881_tab17.pdf 예 : new_folder_for_upload_part1.pdf new_folder_for_upload_part2.pdf 마지막으로 완성이 후 모든 디렉토리의 모든 파일을 최상위 디렉토리에 저장해야합니다. –

답변

1

으로 가정하고 각 하위 디렉토리에 대해 파일 번호 매기기를 다시 시작하고 모든 파일을 최상위 디렉토리로 이동 (빈 하위 디렉토리를 남겨두기)한다고 가정합니다. 읽기 쉽게 스크립트로 포맷 :

find . -type f -print0 | while IFS= read -r -d '' file 
do 
    myfile=$(echo $file | sed "[email protected]/@@") 
    mydir=$(dirname "$myfile") 
    if [[ $mydir != $lastdir ]] 
    then 
     NR=1 
    fi 
    lastdir=${mydir} 
    mv "$myfile" "$(dirname "$myfile")_part${NR}" 
    ((NR++)) 
done 

또는 한 줄 명령과 같이

find . -type f -print0 | while IFS= read -r -d '' file; do myfile=$(echo $file | sed "[email protected]/@@"); mydir=$(dirname "$myfile"); if [[ $mydir != $lastdir ]]; then NR=1; fi; lastdir=${mydir}; mv "$myfile" "$(dirname "$myfile")_part${NR}"; ((NR++)); done 

가 조심하십시오. 이것은 무장이며, 현재 작업 디렉토리에서 또는 그 이하의 모든 파일을 대량으로 이름 바꾸기/이동합니다. 자신의 책임하에 사용하십시오.

find . -depth -empty -type d -delete 
+0

는 귀하가 제공 한 스크립트가 나를 위해 일한 DevSolar을 감사드립니다. 도움 주셔서 감사합니다. –