답변:
서브 디렉토리의 파일 이름도 변경해야하고 find
지원 -execdir
술어를 지원하는 경우 다음을 수행 할 수 있습니다.
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
-depth
옵션 을 제안 find
하고 생각하게 해준 @glenn jackman에게 감사합니다 .
일부 시스템 (GNU / Linux 시스템 포함)에서 find
이름에 공백이 포함 된 파일과 유효한 문자를 형성하지 않는 바이트 시퀀스가없는 경우 (문자 세트로 인코딩 된 비 ASCII 문자의 이름을 가진 미디어 파일의 경우) 로케일과 다릅니다). 로케일을 C
(에서와 같이 LC_ALL=C find...
) 설정하면 문제가 해결됩니다.
-depth
옵션을 사용 하면를 제거 할 수 있습니다 sort
.
-name '* *'
에 대한 -name '*_*'
변경 "${1// /_}"
에"${1//_/.}"
bash
의 맨 페이지 에서 찾을 수 있습니다 .
모든 쉘에서 이름에 공백이 포함 된 파일을 반복 할 수 있습니다. 밑줄로 공백을 바꾸는 것은 bash, ksh 및 zsh에서 ${VARIABLE//PATTERN/REPLACEMENT}
구문을 사용하면 쉽습니다 .
for x in *" "*; do
mv -- "$x" "${x// /_}"
done
데비안, 우분투 및 파생 상품에서는 Perl을 사용할 수 있습니다 rename
(다른 배포판은 다른 프로그램을 제공하므로 rename
해당 프로그램은 여기서 유용하지 않습니다).
rename 's/ /_/g' *
필수 zsh 솔루션 :
autoload zmv
zmv '(*)' '${1// /_}'
필수 POSIX 솔루션 :
for x in *" "*; do
y=$(printf %sa "$x" | tr " " "_")
mv -- "$x" "${y%a}"
done
s/…/…/g
는 모든 발생을 대체하는 것을 의미합니다. 매뉴얼에 잘 설명되어 있지 않습니다 . 디렉토리의 이름을 바꾸려면 여러 가지 방법이 있으며 검색하십시오 (이전에 본 것 같습니다). 새로운 디렉토리를 찾을 수 없으면 새로운 질문을하십시오.
_MG_blah.JPG
을 IMG_blah.JPG
.
rename
이것을 위해 사용할 수 있습니다 (여기서는 하나가 util-linux
아니라 에서 가정 perl
) :
cd /path/to/dir
rename ' ' _ *\ *
이름에서 모든 파일과 디렉토리 공간을 찾은 다음 공백을 밑줄로 바꿉니다. glob 파일 일치를 사용하므로 시작하려면 올바른 디렉토리에 있어야합니다.
재귀 적 일치를 원한다면 rename
디렉토리에서 자신의 이름이 변경된 항목을 잡기 위해 몇 번 실행해야 할 수도 있습니다 .
cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
rename
일 교체에 의해 지정된 파일의 이름을 바꿉니다 첫번째 의 발생을 에서 그들의 이름 을 ."이 이름에 하나의 공간 파일에만 작동합니다 그래서. ( rename
루프를 호출 할 수는 있지만 실제로 올바른 도구는 아닙니다.)
mmv
설치된 경우 다른 옵션이 있습니다 .
mmv \*\ \* \#1_#2
_
여러 공백이있는 이름은 작동하지 않습니다.
Caleb과 Gilles의 답변을 바탕으로 Debian / Ubuntu에서 파일을 재귀 적으로 이름을 바꾸는 데 도움이되었습니다.
cd /path/to/dir
shopt -s globstar
rename 's/ /_/g' **
참고 : 이름을 바꿀 파일과 방법을 미리 보려면 -n
스위치를 rename
다음 과 함께 사용하십시오 .
rename -n 's/ /_/g' **
또 다른 참고 사항 : 설정 globstar
은 **
모든 하위 디렉토리의 파일과 일치하므로 현재 디렉토리 만 원하는 경우 globstar를 설정하거나 *
대신 사용하지 마십시오 **
.
참고 사항 : rename
검색어가 여러 번있는 파일에 대해서는 명령을 두 번 이상 실행해야합니다.
a b/c d
에 a_b/c_d
작동하지 않을 것입니다, 당신은 이름을 먼저 필요할 것 a b/c d
으로 a b/c_d
, 다음 a b
에 a_b
).
rename
명령을 두 번 실행한다는 의미 입니까?
**
도트 파일을 제외하고 심볼릭 링크를 통과합니다.
정규 표현식에서 플래시가 아니고 (나는 아닙니다!) kde 용으로 설계된 응용 프로그램을 실행할 수 있다면 (kde-k 데스크탑을 사용하거나 라이브러리가 설치되어 있음) krename은 훌륭한 그래픽 유틸리티입니다. 변경 사항을 커밋 하기 전과 후에 볼 수 있습니다 . 옵션으로 간단한 변환이 많이 있으며 정규 표현식도 지원합니다. 여러 순차 변환을 하나의 이름으로 결합하여 한 번에 하나의 복잡한 변환을 수행 할 필요가 없습니다. 또한 이름 변경이 적용된 후 동일한 파일의 이름을 계속 바꾸는 옵션도 있습니다.
자주 사용하지는 않지만 실제로 사용하면 빠르고 쉽게 작업을 수행 할 수 있습니다. 다운로드 한 다양한 미디어 파일의 이름을 바꿀 때 매우 유용하므로 시스템에서 균일하게 관리 할 수 있습니다. 프로그램을 사용하는 동안 참조 할 수 있도록 krename 매뉴얼을 별도로 다운로드하는 데 도움이됩니다.
find -maxdepth 1
OP가 현재 폴더에서 작동하는 것에 대해 요청한 내용을 정확하게 수행하는 데 사용해야 합니다.