Mac OS X은 cp와 cat을 결합하여 목록의 파일을 순차적으로 복사하고 이름을 바꿉니다.

Mac OS X은 cp와 cat을 결합하여 목록의 파일을 순차적으로 복사하고 이름을 바꿉니다.

저는 MacBook Pro OS X 2013 모델을 사용하고 있습니다. list.txt줄바꿈으로 구분된 텍스트 파일의 파일 이름 목록이 있습니다.

list.txt는 정확히 동일하지만 목록이 매우 길어집니다.

e.jpeg
x.jpeg
a.jpeg
m.jpeg
p.jpeg
l.jpeg
e.jpeg

동일한 파일을 대상 폴더에 수천 번 복사하려면 이러한 명령이 필요하며 중복된 파일 이름 문제가 발생합니다. 파일을 다시 복사하려면 필요한데 새 폴더에 복사할 때 순차적으로 이름을 바꾸면 이름이 중복되는 일은 없을 것 같아요. 나는 대략 같은 것을 복사하고 있습니다. 40개의 파일은 나타나는 순서에 따라 수천 번 반복됩니다 list.txt. 각 파일의 크기는 100KB에서 250KB까지입니다.

각 파일을 나열된 순서대로 list.txt다른 폴더에 복사하고 순서대로 이름을 바꾸고 싶습니다.

나는 그것을 사용하여 파일을 새 폴더에 복사했는데 작동했지만 중복 항목을 유지하거나 이름을 바꾸지 않았습니다.

cp `cat list.txt` new-folder/

나는 이것을 순서대로 이름을 바꾸는 데 사용하지만 잘못된 폴더에서 이름을 바꿉니다.

find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash

나는 이 방법을 사용하여 그것들을 결합하려고 시도했지만 성공하지 못했습니다.

cat [filename] | while read line; do [command] "$line"; done

나는 다음과 같은 많은 조합을 시도했습니다.

cp `cat list.txt` new-folder/ | while read line; do find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash "$line"; done

이 파일들은 프로젝트의 추가 날짜/생성 날짜 이전에 사용할 것이기 때문에 list.txt 순서로 새 폴더에 나타나야 합니다. 복사되고 이름이 바뀔 때까지 각 행에서 지연을 수행해야 할 수도 있습니다.

답변1

파일 목록에서 쉘 스크립트를 작성하려고 하지 마십시오. 올바르게 수행하기 어렵고 필요한 모든 것을 직접 실행하는 것보다 거의 항상 훨씬 더 어렵습니다. 대신, 사용 가능한 파일 이름이 있으면 계속해서 이름을 바꾸십시오.

#!/bin/sh
number=1
while IFS= read -r old_name; do
  new_name=$(printf %04d "$number").jpeg
  number=$((number+1))
  mv -- "$old_name" "new-folder/$new_name"
done <list.txt

관련 정보