cmd 라인 unix에서 파일 이름의 공백 바꾸기

cmd 라인 unix에서 파일 이름의 공백 바꾸기

안녕하세요. 이름에 공백이 있는 파일이 많이 있습니다. 공백 없이 새 파일로 변환할 수 있는 방법이 있나요? 예를 들어 Hello World.pdf 파일이 있는데 Hello_World.pdf로 이동하고 싶습니다. 분명히 하나의 파일에 대해 mv 명령을 사용할 수 있지만 폴더의 모든 파일에 대해 사용하고 싶습니다.

감사해요

답변1

당신은 사용할 수 있습니다tr또는sed이에 대한 명령:

for file in *.pdf
do
    newname=$(echo $file | tr ' ' _)
    mv "$file" $newname
done

이는 명령 대체를 위해 최신 POSIX 구문을 사용한다는 점에 유의하세요.명령).
아주 오래된 Bourne 쉘을 사용하고 있다면 백틱을 사용해야 합니다:

newname=`echo $file | tr ' ' _`

답변2

다음은 이 작업에 사용하는 몇 가지 스크립트입니다.

#!/bin/ksh
# Name     : unspace - replace spaces by underscores in file names
# Usage    : unspace [file ...]
# Example  : unspace *.doc
unspace()
{
  ls "$@" | while a=$(line)
  do
    file=$(echo $a | grep " ")
    if [ -n "$file" ]
    then
      file="$(print "$file" | sed 's/ /_/g')"
      print "$a" "->" "$file"
      mv "$a" "$file"
    fi
  done
}
[[ "$(basename $0)" = unspace ]] && unspace "$@"

다음은 현재 디렉터리 아래의 모든 이름을 재귀적으로 수정하는 것입니다. 디렉터리 이름에 공백도 포함되어 있으면 여전히 약간의 작업이 필요합니다.

#!/bin/ksh
find . |
  while a=$(line)
  do
          newName="$(print $a | tr ' ' '_')"
          if [ "$a" != "$newName" ]
          then
                  mv "$a" "$newName"
                  print $a moved
          else
                  print $a unchanged
          fi
  done

답변3

Bash가 있으면 외부 도구를 호출할 필요가 없습니다.

for file in *.pdf
do 
  if [ -f "$file" ];then
     echo mv "$file" "${file// /_}"
  fi
done

관련 정보