디렉토리의 파일 이름에서 공백 제거

디렉토리의 파일 이름에서 공백 제거

something .pdf대신 일부 파일 이름이 잘못 지정된 디렉토리가 있습니다 something.pdf. 파일 이름에서 공백을 제거하는 데 사용할 수 있는 빠른 방법이 있습니까?

나는 열심히 노력했다find -name "* .pdf" -type f | rename 's/ //g'

그러나 그것은 작동하지 않았습니다.

답변1

zsh에서는 다음 명령을 사용하여 쉽게 수행할 수 있습니다.zmv기능. autoload -U zmvyours 를 입력 ~/.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를 변경한 후 즉시 종료할 수 있습니다.

관련 정보