*.tsv 파일에 awk 출력을 전달하여 파일 이름 바꾸기

*.tsv 파일에 awk 출력을 전달하여 파일 이름 바꾸기

*.tsv데이터가 기술된 데이터와 파일을 가지고 있습니다 . 설명을 사용하고 이에 따라 데이터 이름을 바꾸고 싶습니다.

한번 봐주세요 :

  • awkTSV를 필터링하는 명령은 다음을 제공합니다.

      common_voice_en_22090684.mp3 four
      common_voice_en_22090691.mp3 no
      common_voice_en_22090696.mp3 one
    
  • 다음이 있는 디렉토리를 살펴보세요 *.mp3.

    for i in *.mp3 ; do
    echo $i
    
  • mv파일 이름을 바꾸는 명령이며 두 개의 인수(변경할 파일 및 내용)를 사용합니다.

awk(설명을 읽고 사용하기 위해) 및 ( mv전달된 설명으로 기존 파일의 이름을 바꾸려면? 따라서 위의 예를 보면 결과는 다음과 같습니다.

four.mp3    
no.mp3  
one.mp3 

제안된 명령을 사용하는 것은 중요하지 않습니다. 이를 수행하는 방법에 대한 아이디어나 제안을 환영합니다!

답변1

이는 요구 사항을 충족하지 않지만 많은 파일을 처리할 것으로 예상되는 경우 셸 확장 대신 .tsv를 드라이버로 사용하면 더 나은 성능을 얻을 수 있습니다. mp3당 tsv를 한 번 열지 않기 때문입니다. echo예상한 대로 작동할 것 같으면 제거하세요 .

$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv

답변2

IIUC, 출력을 저장한 후 이와 같은 것을 원합니다.TSV를 필터링하는 awk 명령파일에:

#!/usr/bin/env sh

for i in *.mp3
do
    new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
    if [ -n "$new_name" ]
    then
        echo mv -- "$i" "$new_name"
    fi
done

실제로 이름 바꾸기를 수행하려면 제거 echo하되 필요한 것이 맞는지 확인하려면 먼저 실행하십시오. 또한 mv스크립트 실행이 해당 줄에 도달할 때 원본 파일이 이미 삭제되기 때문에 실패할 가능성이 적습니다 . set -e첫 번째 mv실패 후 즉시 종료하는 데 사용할 수 있습니다.

관련 정보