저는 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