*.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
이는 요구 사항을 충족하지 않지만 많은 파일을 처리할 것으로 예상되는 경우 셸 확장 대신 .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
실패 후 즉시 종료하는 데 사용할 수 있습니다.