![재귀적으로 파일 이름 바꾸기](https://linux55.com/image/133121/%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
저는 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
추가해야 할 수도 있음 ).-i
mv
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 {} +
숨겨진 디렉터리로 드롭다운되지만 해당 디렉터리의 파일 이름은 바뀌지 않습니다.