문제

폴더에 여러 파일이 있으며 모든 파일 이름의 모든 공간 문자를 밑줄로 바꾸고 싶습니다. 이것을 어떻게 달성 할 수 있습니까?

도움이 되었습니까?

해결책

이렇게해야합니다.

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

다른 팁

Perl 스타일의 regexes를 취하는 '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.

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

글쎄, 나는 방금 대답을 직접 찾았다. 가장 우아한 솔루션은 없습니다 (조건을 준수하지 않는 파일의 이름을 바꾸려고합니다). 그러나 작동합니다. (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

Bash를 사용하는 경우 :

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

변수 인용 :

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

실제 이름 바꾸기를 위해 "echo"를 제거하십시오.

모든 파일이 .txt의 모든 파일이라고 가정하면 이와 같은 것을 시도하십시오.

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

문자열 (케이스의 공간 문자)을 다른 문자열로 바꾸는 가장 쉬운 방법 Linux 사용 중입니다 sed. 다음과 같이 할 수 있습니다

sed -i 's/\s/_/g' *

도움이 되었기를 바랍니다.

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

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

나는 당신의 대답이 있다고 믿습니다 파일 이름의 공백을 밑줄로 교체하십시오.

모든 파일의 이름을 a로 바꿉니다 .py 확장 사용, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

샘플 출력,

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top