디렉토리(및 모든 하위 파일/디렉터리)를 이동하면서 항목을 알파벳 순서로 이동하려면 어떻게 해야 합니까?

디렉토리(및 모든 하위 파일/디렉터리)를 이동하면서 항목을 알파벳 순서로 이동하려면 어떻게 해야 합니까?

다음 명령을 실행할 때:

mv -v foo /mnt/bar

디렉토리 foo와 모든 하위 콘텐츠가 이 디렉토리로 이동됩니다 /mnt/bar. 파일이 이동되는 순서는 다음과 같습니다.목차주문하다( ls -U).

동일한 작업을 수행하면서 하위 파일/디렉토리를 foo알파벳 순서로 이동하는 좋은 방법이 있습니까?

find -exec mv하위 콘텐츠를 알파벳순으로 반복하는 데 사용할 수 있다는 것을 알고 있지만 대상에서 동일한 하위 디렉터리 구조를 유지하려면 몇 가지 성가신 작업이 필요합니다. GNU에 플래그가 있었으면 좋겠지 mv만 매뉴얼 페이지에는 유용한 내용이 표시되지 않습니다.

답변1

$ \ls foo | xargs -I% mv -v foo/% bar
'foo/one' -> 'bar/one'
'foo/sie' -> 'bar/sie'
'foo/two' -> 'bar/two'
'foo/uve' -> 'bar/uve'
'foo/wox' -> 'bar/wox'
'foo/zanzibar' -> 'bar/zanzibar' 
  1. ls항목을 알파벳순으로 나열하는 데 사용됩니다 . 순수하게 실행 중인지 확인하려면 ls(.bashrc 또는 .bash_aliases에 숨겨진 별칭으로 추가된 추가 문자 없음) 명령을 .bashrc 또는 .bash_aliases 로 실행하세요 \ls.
  2. ls다음으로 출력 보내기xargs
  3. 각 항목에 변수와 함께 변수 이름을 지정하십시오 -I(이것은 단지 mv명령에서 "볼" 수 있는 정보를 제공합니다)
  4. 항목( 라고 함 %)을 해당 위치에서 foo새 대상으로 이동합니다.

답변2

지원 대상 :zshpax-0

printf '%s\0' foo foo/**/*(D) | pax -0rwdv /mnt/bar/ && rm -rf foo

이러한 재귀 글로브는 각 수준에서 어휘적으로 정렬됩니다(로케일의 데이터 정렬 사용). a전에 전에 a/a전에 …a/bb

find foo -print0 | sort -z전체 경로를 정렬하는 것과는 다릅니다. 예를 들면 다음과 같습니다.

a
a/b
a/b.c
a/b/c

대신 C 로케일에서는 다음 순서로 진행됩니다.

a
a/b
a/b/c
a/b.c

zsh그룹을 형성하세요 .

관련 정보