예시 파일:
RBFATL001USCGA002.--K1234--
RCAVTL001USCGA043.--K2135--
산출:
RBFATL001USCGA002
RCAVTL001USCGA043
답변1
항상 사이클이 있습니다. 어쩌면 루프를 숨기는 도구를 원한다는 뜻일까요?
perl
그런 다음 's rename
( prename
또는 라고도 함)를 사용할 수 있습니다 perl-rename
.
rename 's/\.[^.]+\.*\z//s' ./*.*
또는 zsh
다음과 같을 수도 있습니다 zmv
:
autoload zmv
zmv '(*).[^.]##.#' '$1'
기본적으로 이러한 파일은 숨겨진 파일(이름이 로 시작하는 파일)의 이름을 바꾸지 않습니다 .
. 이들도 처리하려면 다음을 수행하십시오.
zmv '(?*).[^.]##.#(#qD)' '$1'
.foo.bar.
에 확장이 있다고 생각하는 사람들 (그리고 확장이 없다고 .bar.
생각하는 사람들). ( ) foo...
로 변경을 고려하고 싶다면 이를 조정하면 됩니다 . 나는 당신이 그것을 고려하고 싶지 않다고 생각합니다 (이것은 제거될 것입니다 (그러나 파일 이름이 비어 있을 수 없기 때문에 실패할 것입니다))..
zmv '(?*).*(#qD)' '$1'
.foo.bar.
zmv '*(#qD)' '${f%%.*}'
또한 에서는 file.tar.gz
확장이 고려 .gz
되지 않고 로 간주됩니다 .tar.gz
.
이 작업을 재귀적으로 수행합니다.
zmv '(**/)(?*).[^.]##.#(#qD)' '$1$2'
또는 다음을 사용하여 rename
:
find . -depth -name '?*.*' -exec rename 's/\.[^./]+\.*\z//s' {} +
답변2
루프를 사용하지 않고 이를 수행하는 방법은 다음과 같습니다.
find . -type f -name "?*.*" -exec sh -c 'mv -v "$0" "${0%.*}"' '{}' \;