별도의 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