같은 이름의 파일을 복사하세요.

같은 이름의 파일을 복사하세요.

디렉토리가 있습니다

--dir1
    image1
    image2
    image3
--dir2
    image1
    image2
    image3
--dir3
    image1
    image2
    image3

모든 디렉터리의 모든 파일(같은 이름을 가진)을 새 이름을 가진 새 디렉터리로 복사하고 1부터 마지막까지 순차적으로 번호를 매기고 싶습니다.

어떻게 해야 합니까?

이 파일은 오래된 필름에서 스캔한 이미지이므로 디지털 필름에 추가해야 합니다. 수천 개가 있습니다…

답변1

셸을 사용하여 특정 숫자 형식으로 bash새 이름을 가진 디렉터리에 파일을 복사합니다 .destdirnnnnnn.jpgn

복사하려는 모든 파일은 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*결과가 만족스러우면 해당 디렉터리를 삭제하세요.

관련 정보