다음 명령을 실행할 때:
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'
ls
항목을 알파벳순으로 나열하는 데 사용됩니다 . 순수하게 실행 중인지 확인하려면ls
(.bashrc 또는 .bash_aliases에 숨겨진 별칭으로 추가된 추가 문자 없음) 명령을 .bashrc 또는 .bash_aliases 로 실행하세요\ls
.ls
다음으로 출력 보내기xargs
- 각 항목에 변수와 함께 변수 이름을 지정하십시오
-I
(이것은 단지mv
명령에서 "볼" 수 있는 정보를 제공합니다) - 항목( 라고 함
%
)을 해당 위치에서foo
새 대상으로 이동합니다.
답변2
지원 대상 :zsh
pax
-0
printf '%s\0' foo foo/**/*(D) | pax -0rwdv /mnt/bar/ && rm -rf foo
이러한 재귀 글로브는 각 수준에서 어휘적으로 정렬됩니다(로케일의 데이터 정렬 사용). a
전에 전에 a/a
전에 …a/b
b
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
그룹을 형성하세요 .