디렉토리가 있습니다
--dir1
image1
image2
image3
--dir2
image1
image2
image3
--dir3
image1
image2
image3
모든 디렉터리의 모든 파일(같은 이름을 가진)을 새 이름을 가진 새 디렉터리로 복사하고 1부터 마지막까지 순차적으로 번호를 매기고 싶습니다.
어떻게 해야 합니까?
이 파일은 오래된 필름에서 스캔한 이미지이므로 디지털 필름에 추가해야 합니다. 수천 개가 있습니다…
답변1
셸을 사용하여 특정 숫자 형식으로 bash
새 이름을 가진 디렉터리에 파일을 복사합니다 .destdir
nnnnnn.jpg
n
복사하려는 모든 파일은 dir*/image*
귀하의 예와 같이 단일 와일드카드 패턴과 일치한다고 가정합니다.
#!/bin/bash
shopt -s nullglob
num=0
mkdir -p destdir || exit
for name in dir*/image*; do
num=$(( num + 1 ))
printf -v newname 'destdir/%.6d.jpg' "$num"
cp "$name" "$newname"
done
시험:
$ tree
.
|-- dir1
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
|-- dir2
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
|-- dir3
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
`-- script
3 directories, 16 files
$ ./script
$ tree
.
|-- destdir
| |-- 000001.jpg
| |-- 000002.jpg
| |-- 000003.jpg
| |-- 000004.jpg
| |-- 000005.jpg
| |-- 000006.jpg
| |-- 000007.jpg
| |-- 000008.jpg
| |-- 000009.jpg
| |-- 000010.jpg
| |-- 000011.jpg
| |-- 000012.jpg
| |-- 000013.jpg
| |-- 000014.jpg
| `-- 000015.jpg
|-- dir1
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
|-- dir2
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
|-- dir3
| |-- image1
| |-- image2
| |-- image3
| |-- image4
| `-- image5
`-- script
4 directories, 31 files
항상 백업된 데이터에 대해 이러한 작업을 테스트 실행하십시오.
dir*
결과가 만족스러우면 해당 디렉터리를 삭제하세요.