별도의 txt 파일에 있는 이름을 기반으로 .gz 파일 이름을 바꿉니다.

별도의 txt 파일에 있는 이름을 기반으로 .gz 파일 이름을 바꿉니다.

별도의 txt 파일에 있는 이름을 기반으로 .gz 파일의 이름을 바꾸고 싶습니다. 다음과 같은 이름의 .gz 파일이 포함된 지도가 있습니다.

trooper10.gz
trooper11.gz 
trooper12.gz
etc.

첫 번째 열에는 원하는 이름이 있고 다른 열에는 .gz 이름(탭으로 구분됨)이 있는 별도의 txt 파일이 있습니다.

B25    trooper10
C76    trooper11
A87_2    trooper12

따라서 파일 이름을 다음과 같이 바꿔야합니다.

B25.gz
C76.gz
A87_2.gz

나는 노력했다

for i in *.gz; do
line=$(grep -x -m 1 -- "${i}" /path_to_txtfile/list_names.txt)

하지만 txt 파일에서 해당 열을 파악하는 방법을 잘 모르겠습니다. gz 파일이 너무 많아서 해결 방법이 있는지 여쭤보고 싶습니다.

답변1

예, 파일 시스템에서 gz 파일을 가져오는 대신 파일을 읽는 것부터 시작합니다.

while IFS=$'\t' read -r newName oldName; do
    mv -- "$oldName".gz "$newName.gz"
done < names_file

답변2

그것은 단지 아닌가요:

<list_names.txt awk -F'\t' '{printf "%s.gz\0%s.gz\0", $2, $1}' | xargs -r0n2 mv --

또는 더 효율적으로:

perl -F'\t' -lae 'rename "$F[1].gz", $"F[0].gz" or warn "$F[1].gz: $!\n"' list_names.txt

관련 정보