something .pdf
대신 일부 파일 이름이 잘못 지정된 디렉토리가 있습니다 something.pdf
. 파일 이름에서 공백을 제거하는 데 사용할 수 있는 빠른 방법이 있습니까?
나는 열심히 노력했다find -name "* .pdf" -type f | rename 's/ //g'
그러나 그것은 작동하지 않았습니다.
답변1
zsh에서는 다음 명령을 사용하여 쉽게 수행할 수 있습니다.zmv
기능. autoload -U zmv
yours 를 입력 ~/.zshrc
하거나 셸에서 한 번 실행한 후 다음을 수행하세요.
zmv '* .pdf' '${f// /}'
그러면 파일 이름의 모든 공백이 제거됩니다. .pdf
확장 이전에 항목 만 제거하려는 경우 :
zmv '* .pdf' '${f# .pdf}.pdf'
또는 역참조로 사용할 수 있는 그룹을 구분하려면 괄호를 사용하세요.
zmv '(*) .pdf' '$1.pdf'
하위 디렉터리에서도 작업을 수행하려면 다음을 수행하세요.
zmv '**/* .pdf' '${f# .pdf}.pdf'
(**/)
또는 ( 대신 사용해야 합니다 (**)/
):
zmv '(**/)(*) .pdf' '$1$2.pdf'
Linux에서 zsh 유무에 관계없이 파일 이름에 다음과 같은 잘못된 공백만 있는 경우:
rename \ .pdf .pdf *\ .pdf
또는 원래 이름에 공백이 하나만 있는 경우:
rename ' ' '' *\ .pdf
하위 디렉터리에서도 작업하려는 경우 ksh93 ≥o+ 또는 bash ≥4에서 **
하위 디렉터리의 파일을 일치시키는 데 사용할 수 있습니다. Bash에서는 먼저 ksh93을 shopt -s globstar
실행하고(이 줄을 에 입력해야 합니다 ~/.bashrc
) .set -o globstar
rename \ .pdf .pdf **/*\ .pdf
bash는 디렉터리로 재귀할 때 기호 링크를 따릅니다.
이점이 없으면 재귀를 **
사용할 수 있습니다 find
.
find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +
Debian 및 그 파생 제품(Ubuntu 포함) 및 대부분의 비 Linux 시스템에서 perl
명령 rename
은 대체될 문자열과 대체 문자열 대신 Perl 표현식을 인수로 사용한다는 점에서 다릅니다. rename.ul
위 명령(Debian 및 그 파생물에서) 또는 Perl과 함께 사용하십시오 rename
.
rename 's/ \.pdf$/.pdf/' -- *\ .pdf # strip the space before the extension
rename 's/ //g' -- *\ .pdf # strip all spaces
답변2
이렇게 하면 실수로 덮어쓰는 것을 방지할 수 있습니다(중요한 경우).
IFS=$'\n'
for i in $(find . -name '* .pdf')
do
mv -i "$i" "${i% .pdf}.pdf"
done
대화식 쉘에서 이 명령을 실행하는 경우 IFS를 변경한 후 즉시 종료할 수 있습니다.