디렉터리 계층 이름 바꾸기

디렉터리 계층 이름 바꾸기

디렉토리 계층의 이름을 바꾸는 방법은 무엇입니까?

예를 들어 폴더가 2개만 있을 필요 없이 이름을 바꾸고 c/d싶습니다 .x/y

따라서 작업 후에는 /a/b/c/d/e완전한 디렉터리 경로가 됩니다./a/b/x/y/e

순수 bash에서 구현하는 방법을 잘 모르겠습니다. (이러한 bash 스크립트를 만드는 것은 수동으로 이름을 바꾸는 것보다 시간이 더 걸릴 것이라고 가정합니다. 그러한 디렉토리는 약 200개 있습니다.)

어쩌면 이 목적을 위한 유틸리티가 있을까요?

답변1

조합을 사용하면 mkdir -p쉽게 mv할 수 있습니다. 어려운 부분(셸과 마찬가지로)은 셸에서 잘못 해석될 수 있는 안전한 방법으로 특수 기호의 이름을 제공하는 것입니다.

경로에 \tand가 포함될 수 없다는 것을 보장할 수 있다고 가정합니다 \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사용하는 대신 원하는 텍스트 편집기를 사용하여 파일을 준비 할 수 있습니다 .cathere document

참고 2: "${OUT%/*}"구문("일치하는 접미사 패턴 제거")은 bash에만 적용됩니다.

참고 3: 이전 디렉터리는 삭제되지 않으며 유사한 명령을 실행하여 find -depth -type d -empty -print -exec rmdir {} \;삭제할 수 있습니다.

관련 정보