디렉토리 계층의 이름을 바꾸는 방법은 무엇입니까?
예를 들어 폴더가 2개만 있을 필요 없이 이름을 바꾸고 c/d
싶습니다 .x/y
따라서 작업 후에는 /a/b/c/d/e
완전한 디렉터리 경로가 됩니다./a/b/x/y/e
순수 bash에서 구현하는 방법을 잘 모르겠습니다. (이러한 bash 스크립트를 만드는 것은 수동으로 이름을 바꾸는 것보다 시간이 더 걸릴 것이라고 가정합니다. 그러한 디렉토리는 약 200개 있습니다.)
어쩌면 이 목적을 위한 유틸리티가 있을까요?
답변1
조합을 사용하면 mkdir -p
쉽게 mv
할 수 있습니다. 어려운 부분(셸과 마찬가지로)은 셸에서 잘못 해석될 수 있는 안전한 방법으로 특수 기호의 이름을 제공하는 것입니다.
경로에 \t
and가 포함될 수 없다는 것을 보장할 수 있다고 가정합니다 \n
(일반적으로 Linux/Unix 시스템의 경우는 그렇지 않습니다). 그런 다음 탭으로 구분된 필드 목록을 이름 바꾸기 도구에 제공할 수 있습니다.
# Prepare paths
cat > names.txt <<"HERE" # TAB separated
a/b/c/d/file1 a/b/x/y/file1
a/white space/file2 a/c/z/while space/file2
a/fancy$name/file2 a/c/z/so what?/file2
HERE
# Do the renaming
while IFS=$'\t' read -r IN OUT; do
printf 'Renaming [%s]->[%s]\n' "$IN" "$OUT"
mkdir -p "${OUT%/*}"
mv "$IN" "$OUT"
done < names.txt
참고: 물론, 다른 것을 names.txt
사용하는 대신 원하는 텍스트 편집기를 사용하여 파일을 준비 할 수 있습니다 .cat
here document
참고 2: "${OUT%/*}"
구문("일치하는 접미사 패턴 제거")은 bash에만 적용됩니다.
참고 3: 이전 디렉터리는 삭제되지 않으며 유사한 명령을 실행하여 find -depth -type d -empty -print -exec rmdir {} \;
삭제할 수 있습니다.