하위 디렉터리의 파일 이름을 바꾸는 방법은 무엇입니까?
이 샘플이 있습니다.
001a
abc001.tif
abc002.tif
abc003.tif
002a
abcd001.tif
abcd002.tif
abcd003.tif
모든 하위 디렉터리 001 - 00x에 있는 모든 파일의 이름을 바꾸고 싶지만 디렉터리 자체의 이름은 바꾸고 싶지 않습니다. 0001
1부터 시작하는 각 이미지 폴더부터 순차적으로 파일 이름을 바꾸고 싶습니다 .
이 명령을 실행하면 하위 폴더가 아닌 기본 폴더에서만 작동합니다. 각 하위 디렉터리에서 반복적으로 실행되고 각 디렉터리가 1로 시작하도록 하려면 무엇을 변경해야 합니까?
for file in $path/*.tif; do
mv -v "${file}" "$path/$(printf "%04d" ${num}).tif"
num=$(( ${num} + 1 ))
done
제가 사용하는 운영체제는 OSX 입니다
파일 이름에서 abc를 제거하고 싶습니다. 이것은 단지 예일 뿐입니다. 모든 파일이 abc로 시작하는 것은 아닙니다.
나는 이것을 시도했고 이름이 바뀌었지만 각 하위 디렉토리에서 하나로 시작하지 않습니다. 처음부터 제대로 작동하려면 무엇을 변경해야 합니까?
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
What can I change in the script to not have it move the files out of the orignial directory
답변1
rename
Perl 기반 도구(때때로 호출됨)가 설치되어 있는 경우 prename
다음과 같이 한 줄로 이 작업을 수행할 수 있습니다.
rename -n 's|^.*|sprintf "%04d.tif", ++$a|e' */*.tif
작성된 대로, 이는 수행할 작업만 알려줍니다. 만족스러우면 -n
자동 실행을 제거하거나 교체하고 -v
무슨 일이 일어나는지 확인하세요.
이 도구가 없으면 귀하와 매우 유사한 루프를 작성할 수 있습니다.
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
echo
원하는 효과가 확실하다면 제거하세요.