[linux] Linux-파일 이름의 공백 바꾸기

폴더에 많은 파일이 있고 모든 파일 이름의 모든 공백 문자를 밑줄로 바꾸고 싶습니다. 이것을 어떻게 할 수 있습니까?



답변

이렇게해야합니다.

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done


답변

Perl 스타일의 정규식을 사용하는 ‘rename’명령을 사용하는 것을 선호합니다.

rename "s/ /_/g" *

-n 플래그를 사용하여 테스트 실행을 수행 할 수 있습니다.

rename -n "s/ /_/g" *


답변

사용 sh …

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

방아쇠를 당기기 전에 이것을 시도하려면 mv로 변경 하십시오 echo mv.


답변

bash를 사용하는 경우 :

for file in *; do mv "$file" ${file// /_}; done


답변

대체 작업을 재귀 적 으로 적용하려면 어떻게해야 합니까? 어떻게 하시겠습니까?

글쎄, 방금 답을 찾았습니다. 가장 우아한 솔루션은 아니지만 (조건을 준수하지 않는 파일의 이름도 변경하려고 시도) 작동합니다. (BTW, 제 경우에는 밑줄이 아닌 ‘% 20’으로 파일 이름을 변경해야했습니다)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done


답변

모든 파일이 .txt라고 가정하여 다음과 같이 시도하십시오.

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done


답변

다음은 또 다른 해결책입니다.

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. awk를 사용하여 파일 이름 주위에 따옴표를 추가합니다.
  2. sed를 사용하여 공백을 밑줄로 바꿉니다. 따옴표로 원래 이름을 인쇄합니다 (from awk); 다음 대체 이름
  3. xargs는 한 번에 두 줄을 가져 와서 mv에 전달합니다.