데이터를 보유하고 *.tsv
데이터를 설명하는 파일입니다. 설명을 사용하고 이에 따라 데이터 이름을 바꾸고 싶습니다.
이것을 봐주세요:
awk
tsv를 필터링하는 명령은 다음과 같습니다.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
이는 요구 사항을 충족하지 않지만 많은 파일을 처리하려는 경우 각 mp3에 대해 tsv를 한 번 열지 않기 때문에 셸 확장자가 아닌 .tsv를 드라이버로 사용하면 더 나은 성능을 얻을 수 있습니다. echo
기대한 대로 작동하는 것 같으면 삭제하세요.
$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv
답변2
IIUC, 출력을 저장한 후 다음과 같은 것을 원합니다.awk 명령은 tsv를 필터링합니다.파일에서:
#!/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
실패 후 즉시 종료할 수 있습니다.