재귀적으로 파일 이름 바꾸기

재귀적으로 파일 이름 바꾸기

저는 Linux를 처음 접했기 때문에 도움이 필요합니다.

현재 디렉터리가 아닌 모든 하위 디렉터리 내용에 적용할 수 있는 방법이 있습니까?

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

답변1

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv '(**/)(* *)' '$1${2// /_}'

코드와 마찬가지로 숨겨진 파일의 이름은 바뀌지 않습니다. 또한 숨겨진 디렉터리 내부도 살펴보지 않습니다. 이름을 바꾸려면 다음과 같이 변경하세요.

autoload zmv # best in ~/.zshrc
zmv '(**/)(* *)(#qD)' '$1${2// /_}'

후자와 동일 합니다 bash(단, 보호 기능이 제공되지 않으므로 옵션을 zmv추가해야 할 수도 있음 ).-imv

LC_ALL=C find . -depth -name '* *' -exec bash -c '
  for file do
    base=${file##*/}
    mv -i -- "$file" "${file%/*}${base// /_}"
  done' bash {} +

-prune첫 번째 것과 결합할 수 없기 때문에 (숨겨진 디렉터리로 내려갈 필요가 없음) 간단한 기능은 없습니다 -depth. 그러나 기능적으로 동등한 기능은 다음과 같이 작성할 수 있습니다.

LC_ALL=C find . -depth -name '* *' ! -path '*/.*' -exec bash -c '
  for file do
    base=${file##*/}
    mv -i -- "$file" "${file%/*}${base// /_}"
  done' bash {} +

숨겨진 디렉터리로 드롭다운되지만 해당 디렉터리의 파일 이름은 바뀌지 않습니다.

관련 정보