Linux 파일 이름 단축(잘림 기호)

Linux 파일 이름 단축(잘림 기호)

Linux에 파일 목록이 있는데 이를 단축하고 싶습니다. 해당 형식은 WhatIWant_WhatIDoNotWant.txt입니다.

WhatIWant.txt처럼 쉽게 만들 수 있는 방법이 있나요? 다음 질문(아래 링크)을 보았고 for do 루프가 정말 마음에 들지만(결과에 중복이 있는 경우를 대비해) 밑줄(_)의 위치 값을 가져와 대신 입력하는 방법을 모르겠습니다. 16자를 끝점으로 사용하는 중...

파일 이름 단축을 위한 Linux 스크립트 또는 프로그램

답변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

관련 정보