파일 이름 목록에서 파일 이름 바꾸기

파일 이름 목록에서 파일 이름 바꾸기

저는 아직 쉘 스크립팅을 처음 접했기 때문에 이 명령이 모든 종류의 잘못된 것이라고 확신합니다. 파일 폴더의 이름을 txt 파일의 이름으로 바꾸려고 합니다. 전제 조건은 filenames.txt와 폴더의 파일이 이미 시스템의 첫 번째 파일과 첫 번째 줄이 일치하도록 구성되어 있다는 것입니다. 내가 얻은 것은 다음과 같습니다.

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

하지만 작동하지 않았습니다. 제가 고치는 것을 도와주실 수 있나요?

감사해요

답변1

파일 이름을 바꾸는 알고리즘 규칙이 없는 경우(즉, 실제로 입력 파일이 필요한 경우) 다음을 제안합니다.

  1. 이름을 바꾸려는 파일 목록에서 txt 파일을 만듭니다. 예:

    찾다 . -이름 "*.mkv" > files.txt

  2. 이 파일을 편집하고 각 줄의 이전 이름 ​​뒤에 새 이름을 추가합니다. 예:

    ./myfirst.mkv ./mynewfirst.mkv

  3. 이 파일을 처리합니다:

    라인을 읽는 동안; 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를 넣어 원하는 대로 작동하는지 테스트할 수 있습니다.echomv

또한 다른 방법으로 시도할 수도 있습니다. 새 이름으로 파일을 어떻게 생성하는지 잘 모르겠지만 다른 답변에서 알 수 있듯이 이전 이름과 새 이름의 파일을 반복하거나 그냥 읽을 수 있습니다. 이름을 지정하고 몇 가지 논리를 적용하여 새 이름을 만듭니다.

관련 정보