2010-07-19 3 views
3

이름이 '_100.jpg'로 끝나는 파일이 많습니다. 그들은 중첩 된 폴더/하위 폴더에 퍼졌습니다. 이제는 재귀 적으로 복사하고 이름을 바꾸려면 '_crop.jpg'접미사가 필요합니다. 불행히도 나는 bash 스크립팅에 익숙하지 않으므로이 일을하는 정확한 방법을 모른다. 나는 googled하고 'find'명령을 '-exec'파라와 함께했지만 행운이 없었다.Bash : 재귀 적으로 파일 복사 및 이름 바꾸기

Plz 도와주세요. 감사.

+0

관련 질문 : [여러 패턴을 기반으로 파일의 이름을 바꾸는 더 나은 방법] (http://stackoverflow.com/a/25597051/2654678). –

답변

6
find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \ 
    | sed 's/_100\.jpg$/_crop\.jpg/' \ 
    | while read l; do eval $l; done 
+0

우수! 그것은 내가 그 주제에 대해 읽은 가장 쉬운 해결책이다! 내가 그것을 읽을 때 나는 왜 내가 혼자서 그것을 발견하지 못했는지 의아하게 생각했다! 아마 b/c 나는 충분히 똑똑하지 않다. :) – PierrOz

2

당신이 bash는 4

shopt -s globstar 
for file in **/*_100.jpg; do 
    echo mv "$file" "${file/_100.jpg/_crop.jpg}" 
one 

또는 사용이

find . -type f -iname "*_100.jpg" | while read -r FILE 
do 
    echo mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}" 
done 
+0

따옴표가 빠져 있고, 개행 문자가 포함 된 파일 이름에는 사용할 수 없습니다. 'find ... -exec' 또는'find ... -print0 | 대신 xargs -0'을 사용하십시오. – Philipp

+0

예, 따옴표가 누락되었습니다. 따라서 xargs를 사용할 필요가 없습니다. 수락 된 답변에는 따옴표도 없습니다 .. – ghostdog74

1

이 시스템에 이미있을 수 있습니다 Perl 스크립트를 사용을 찾을 수있는 경우. 그것은 때로는 rename 대신 prename를 불렀다 : 당신은 파일 이름을 보호해야하는 경우

find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \; 

당신은 정규 표현식에 더 강력한 만들 수있다 "_100"반복하거나 변경하지 않으려는 이름의 일부입니다.

관련 문제