Linux에 파일 목록이 있는데 이를 단축하고 싶습니다. 해당 형식은 WhatIWant_WhatIDoNotWant.txt입니다.
WhatIWant.txt처럼 쉽게 만들 수 있는 방법이 있나요? 다음 질문(아래 링크)을 보았고 for do 루프가 정말 마음에 들지만(결과에 중복이 있는 경우를 대비해) 밑줄(_)의 위치 값을 가져와 대신 입력하는 방법을 모르겠습니다. 16자를 끝점으로 사용하는 중...
답변1
변수 확장은 ${varname%_*}
(마지막)부터 문자열 끝까지 _
모든 것을 제거합니다.
예를 들어
$ name=WhatIWant_WhatIDontWant.txt
$ echo "${name%_*}"
WhatIWant
삭제도 되니 참고하세요 .txt
.
따라서 간단한 루프를 만들 수 있습니다.
for name in *.txt
do
mv -i -- "$name" "${name%_*}.txt"
done
이것을 재귀적으로 원한다면 다음과 같습니다.
find . -name '*.txt' | while read -r "name"
do
mv -i "$name" "${name%_*}.txt"
done
충분할 수도 있지만 파일에 반환 문자가 포함되어 있으면 주의하세요. 이로 인해 주기가 깨질 수 있습니다.
답변2
# We loop over the files with filename suffix .txt
for f in *.txt; do
# We rename the file removing _ and the remaining part including the extension
mv -- "$f" "${f/_*}.txt"
done