답변:
다음 -mindepth
옵션을 사용할 수도 있습니다 .
find . -type f -mindepth 2 -exec mv -i -- {} . \;
(함께 -maxdepth
파일을 수집 할 계층 레벨을 제한 할 수도 있습니다.)
내가 사용 mv -i
하기 위해 ( "상호 작용") mv
파일을 덮어 쓰기 전에 부탁드립니다. 많은 서브 디렉토리를 사용하면 경고하려는 이름 충돌이있을 수 있습니다.
이 --
옵션은 옵션 처리를 중지하므로 mv
하이픈으로 시작하는 파일 이름으로 혼동되지 않습니다.
빈 하위 디렉토리 전체를 정리하십시오.
find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;
-n, --no-clobber
기존 파일을 덮어 쓰지 않습니다. 에 관심이 있으실 수도 있습니다 -b, --backup
.
이 시도:
find ./*/* -type f -print0 | xargs -0 -J % mv % .
추가 정보 : 찾기 스탬프 만 사용하면 이동하려는 모든 파일이 포함 된 목록이 표시됩니다 (제외 -print0
). 예:
probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7
로 -print0
와 xargs
지금 문의 목록을 생성하는 실행합니다. -J %
플래그 수단은, 여기에 목록 요소를 삽입, 그래서 mv $FILE .
발견 된 모든 파일에 대해 실행됩니다.
위의 내용은 BSD xargs에서 작동합니다. GNU 버전 (Linux)을 -I %
사용하는 경우 대신-J %