답변:
제거] {}
에서 mv
, mv
어떤 부모 디렉토리를 무시하고 대상 디렉토리로 걸릴 것입니다 :
find -type f -exec mv {} collection/ \;
-maxdepth 1
도움이 될 것입니다.
find -type f -print0|xargs -0r mv -it colection/
find
(작업을 잘 수행하는) 사용하는 대신 ,이 목적으로 쉘을 사용할 수도 있습니다.
$ PWD에서 $ DEST까지 모든 파일을 원한다고 가정하십시오. 자연스러운 시도는 다음과 같습니다.
mv $PWD/* $DEST
어떻게 작동합니까? "$ PWD / *"표현식은 해당 디렉토리의 모든 파일 이름으로 확장됩니다. 이 쉘 기능을 "globbing"이라고합니다. 마지막 인수 mv
는 대상 디렉토리입니다. 파일이 너무 많으면 명령 줄의 길이가 제한되어있어 작동하지 않습니다.
그러나 해결책은 점 파일 또는 "숨겨진"파일, 파일 이름 및 "."로 시작하는 디렉토리를 생략한다는 문제가 있습니다. 이 문제를 해결하려면 글 로빙 할 때 셸에 도트 파일을 포함시켜야합니다. 이렇게하려면
shopt -s dotglob
사용할 때 bash
(그리고 bash
기본값을 변경하지 않은 경우 아마 사용 합니다). 이 셸에서 위의 명령은 도트 파일에서도 작동합니다.
이외에도에서 zsh
사례별로 선택할 수있는 옵션이 있습니다. 이렇게하려면 넣어
setopt extendedglob
당신의 .zshrc
. 그런 다음 사용할 수 있습니다
mv $PWD/*(D) $DEST
도트 파일을 포함한 모든 파일을 이동합니다. "D"는 "GLOB_DOTS"옵션을 일시적으로 활성화하는 효과가 있습니다.
이제 원래 질문은 모든 하위 디렉토리와 하위 디렉토리에서 모든 일반 파일 (디렉토리가 아님)을 단일 디렉토리로 이동하는 것이 었습니다. 이 작업은 zsh
다음 과 같이 수행 할 수 있습니다 .
mv $PWD/**/*(D.)
여기서 표현식 **/*
은 글로버를 재귀 적으로 하위 디렉토리로 내립니다. D
"또한 dotfiles '를 선택, 수단 .
수단"은 일반 파일이 아닌 디렉토리 "를 선택합니다.
find -type f -exec mv -t collection/ {} +
.. 작동 방식에 대해서는 매뉴얼 페이지를 참조하십시오.