저는 아직 쉘 스크립팅을 처음 접했기 때문에 이 명령이 모든 종류의 잘못된 것이라고 확신합니다. 파일 폴더의 이름을 txt 파일의 이름으로 바꾸려고 합니다. 전제 조건은 filenames.txt와 폴더의 파일이 이미 시스템의 첫 번째 파일과 첫 번째 줄이 일치하도록 구성되어 있다는 것입니다. 내가 얻은 것은 다음과 같습니다.
while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt
하지만 작동하지 않았습니다. 제가 고치는 것을 도와주실 수 있나요?
감사해요
답변1
파일 이름을 바꾸는 알고리즘 규칙이 없는 경우(즉, 실제로 입력 파일이 필요한 경우) 다음을 제안합니다.
이름을 바꾸려는 파일 목록에서 txt 파일을 만듭니다. 예:
찾다 . -이름 "*.mkv" > files.txt
이 파일을 편집하고 각 줄의 이전 이름 뒤에 새 이름을 추가합니다. 예:
./myfirst.mkv ./mynewfirst.mkv
이 파일을 처리합니다:
라인을 읽는 동안; eval mv $line을 수행하십시오. 완료 <files.txt
답변2
저는 여기에서 영감을 얻었습니다.https://unix.stackexchange.com/a/26604
파일과 디렉터리의 파일을 동시에 반복해야 하는 것처럼 들립니다.
DIR=./thefiledir
while : ; do
read -r oldfile <&3
read -r newfile <&4
if [ -z "$oldfile" -o -z "$newfile" ]; then
break
fi
mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt
파일에 디렉토리 이름이 있는지 모르므 로 행 앞에 filenames.txt
를 넣어 원하는 대로 작동하는지 테스트할 수 있습니다.echo
mv
또한 다른 방법으로 시도할 수도 있습니다. 새 이름으로 파일을 어떻게 생성하는지 잘 모르겠지만 다른 답변에서 알 수 있듯이 이전 이름과 새 이름의 파일을 반복하거나 그냥 읽을 수 있습니다. 이름을 지정하고 몇 가지 논리를 적용하여 새 이름을 만듭니다.