쉘 스크립트를 사용하여 특정 하위 디렉토리만 새 폴더로 이동

쉘 스크립트를 사용하여 특정 하위 디렉토리만 새 폴더로 이동

메일 계정이 포함된 폴더가 있는데 Accounts, 이 모든 폴더에는 폴더가 있습니다 Archive.folder. 간단한 스크립트를 사용하여 모든 보관 폴더를 새 폴더로 이동하고 싶습니다.

나는 지금까지 이것을 시도했다:

find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} + 

하지만 아카이브라는 폴더뿐만 아니라 모든 폴더를 이동합니다. archive라는 현재 폴더에서 모든 폴더를 찾아 testnew/폴더로 이동하고 싶습니다. 이동된 폴더의 경로는 이전과 동일해야 합니다.

기존 상황:

Accounts
    - 1
          - archive
          - inbox
          - folder2
    - 2
          - archive
          - inbox
          - folder2

    - 3
          - archive
          - inbox
          - folder2

어떻게 생겼는지:

testnew
    - 1
          - archive
    - 2
          - archive
    - 3
          - archive

답변1

대화형으로 수행하는 것이 괜찮다면 vidir좋은 방법일 수 있습니다. 보다이 답변.

귀하의 경우 절차는 다음과 같습니다.

  1. cd /path/to/Accounts
    find . -type d -name archive | vidir -
    
  2. vidir텍스트 편집기를 실행합니다. "검색 및 바꾸기"를 사용하고 모든 선행 경로를 ./원하는 경로로 바꾸면 행이 원하는 디렉토리 구조와 일치합니다. 경로는 절대 경로이거나 상대 경로일 수 있으며 ../. 예를 들어 이것을 쉽게 돌릴 수 있습니다

    ./1/archive
    ./2/archive
    ./3/archive
    

    이것에

    ../testnew/1/archive
    ../testnew/2/archive
    ../testnew/3/archive
    
  3. 편집된 파일을 저장하고 편집기를 종료합니다.

노트:

  • 디렉터리 구조에 이름이 다음으로 끝나는 디렉터리가 포함된 경우 .(따라서 ./하위 문자열이 처음에만 나타나는 것이 아님) 탭 문자를 나타내는 로 <TAB>./바꾸는 것이 더 좋습니다. "검색 및 바꾸기"에 이 문자를 포함할 수 있는지 여부와 방법은 편집기에 따라 다릅니다.<TAB>whatever/path/you/want/<TAB>
  • EDITOR예를 들어 를 지정하여 편집기를 선택합니다 find … | EDITOR=kate vidir -.
  • vidir파일 시스템 간에 파일을 이동할 수 없습니다. 모든 archive디렉토리가 하나의 파일 시스템에 속하고 testnew다른 파일 시스템에 있으려면 testnew소스 파일 시스템에서 생성하고 사용 vidir하고 마지막으로 testnew대상 파일 시스템으로 이동하십시오.
  • 끝에이건 또 다른 대답이야비대화형을 EDITOR만들기 위해 (ab) 사용하는 실험적 접근 방식이 있습니다 . vidir하지만vidir이름 바꾸기/이동이 발생하기 전에 결과 경로가 실제로 내가 원하는 것인지 확인할 수 있기 때문에 귀하와 같은 경우에 유용하다고 생각합니다 . 뭔가 엉망이 되면 변경 사항을 저장하지 않고 중단할 수 있습니다.문제에 대한 비대화형 솔루션을 원한다면 이것이 vidir최선의 도구가 아닙니다.

관련 정보