abc
내 Ubuntu 컴퓨터에는 , xyz
및 이라는 3개의 디렉터리가 있습니다 pst
. 각 디렉터리에는 서로 다른 이름을 가진 약 7개의 파일이 있습니다. 각 파일의 이름을 ,,,,,,,, abc_1.txt
와 같이 바꾸고 싶습니다 abc_2.txt
. 및 디렉토리와 유사합니다. abc_3.txt
abc_4.txt
abc_5.txt
abc_6.txt
abc_7.txt
xyz
pst
이를 명확히하기 위해 다음 답변 중 하나를 시도했습니다.
i=0
for f in */* ; do i=$(( i+1 )) fp=$(dirname "$f"); ext="${f##*.}" ; echo "$f" "$fp"/"$fp"_"$i"."$ext" ;done
출력은 다음과 같습니다
123/1.jpg 123/123_1.jpg
123/2.jpg 123/123_2.jpg
123/3.jpg 123/123_3.jpg
2275/2275_1.jpg 2275/2275_4.jpg
2275/2275_2.jpg 2275/2275_5.jpg
2275/2275_3.jpg 2275/2275_6.jpg
2275/2275_4.jpg 2275/2275_7.jpg
2275/2275_5.jpg 2275/2275_8.jpg
2275/2275_6.jpg 2275/2275_9.jpg
2275/2275_7.jpg 2275/2275_10.jpg
2275/2275_Thumbs.db 2275/2275_11.db
456/1.jpg 456/456_12.jpg
456/2.jpg 456/456_13.jpg
456/3.jpg 456/456_14.jpg
그러나 나는 결과가 다음과 같기를 원합니다.
123/1.jpg 123/123_1.jpg
123/2.jpg 123/123_2.jpg
123/3.jpg 123/123_3.jpg
2275/2275_1.jpg 2275/2275_1.jpg
2275/2275_2.jpg 2275/2275_2.jpg
2275/2275_3.jpg 2275/2275_3.jpg
2275/2275_4.jpg 2275/2275_4.jpg
2275/2275_5.jpg 2275/2275_5.jpg
2275/2275_6.jpg 2275/2275_6.jpg
2275/2275_7.jpg 2275/2275_7.jpg
2275/2275_Thumbs.db 2275/2275_8.db
456/1.jpg 456/456_1.jpg
456/2.jpg 456/456_2.jpg
456/3.jpg 456/456_3.jpg
어떻게 해야 하나요?
답변1
더 나은 이해를 위해 다음을 확인하십시오. - 스크립트에서 이 작업을 수행하고 싶으므로 다음과 같은 명령을 받습니다.
i=0
for f in */* ; do i=$(( i+1 )) fp=$(dirname "$f"); ext="${f##*.}" ; echo "$f" "$fp"/"$fp"_"$i"."$ext" ;done
출력은 다음과 같습니다 -
123/1.jpg 123/123_1.jpg
123/2.jpg 123/123_2.jpg
123/3.jpg 123/123_3.jpg
2275/2275_1.jpg 2275/2275_4.jpg
2275/2275_2.jpg 2275/2275_5.jpg
2275/2275_3.jpg 2275/2275_6.jpg
2275/2275_4.jpg 2275/2275_7.jpg
2275/2275_5.jpg 2275/2275_8.jpg
2275/2275_6.jpg 2275/2275_9.jpg
2275/2275_7.jpg 2275/2275_10.jpg
2275/2275_Thumbs.db 2275/2275_11.db
456/1.jpg 456/456_12.jpg
456/2.jpg 456/456_13.jpg
456/3.jpg 456/456_14.jpg
하지만 나는 이 출력이 다음과 같기를 원합니다.
123/1.jpg 123/123_1.jpg
123/2.jpg 123/123_2.jpg
123/3.jpg 123/123_3.jpg
2275/2275_1.jpg 2275/2275_1.jpg
2275/2275_2.jpg 2275/2275_2.jpg
2275/2275_3.jpg 2275/2275_3.jpg
2275/2275_4.jpg 2275/2275_4.jpg
2275/2275_5.jpg 2275/2275_5.jpg
2275/2275_6.jpg 2275/2275_6.jpg
2275/2275_7.jpg 2275/2275_7.jpg
2275/2275_Thumbs.db 2275/2275_8.db
456/1.jpg 456/456_1.jpg
456/2.jpg 456/456_2.jpg
456/3.jpg 456/456_3.jpg
답변2
cd /path/to/abc; cnt=0; for i in *.*; do mv "$i" "${PWD##*/}_$((++cnt)).${i##*.}"; done
cd
각 디렉토리 abc, xyz, ...에 대해 해당 디렉토리로 이동 해야 합니다.*.*
접미사가 있는 파일만 선택하는 데 사용됩니다.- 장난을 치기 전에
mv
결과가 어떻게 보일지 확인하기 위해 대체하십시오.echo
편집하다:
여러 디렉터리에 대해 이 작업을 수행하려면 각 디렉터리의 카운터를 재설정하세요.
소식통:
for i in */*.*; do [ "$dn" != "${i%/*}" ] && cnt=0; dn="${i%/*}"; mv "$i" "${dn}/${dn}_$((++cnt)).${i##*.}"; done
아름답게 인쇄되었습니다:
for i in */*.*; do
# reset counter if different directory or dn is unset
[ "$dn" != "${i%/*}" ] && cnt=0
# set directory name
dn="${i%/*}"
# move file
mv "$i" "${dn}/${dn}_$((++cnt)).${i##*.}"
done