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