하위 디렉토리에서 현재 디렉토리로 모든 파일을 이동 하시겠습니까?


14

모든 서브 디렉토리에 포함 된 파일을 현재 디렉토리로 이동 한 다음 빈 서브 디렉토리를 제거하려면 어떻게해야합니까?

이 질문을 찾았 지만 답변을 다음과 같이 조정했습니다.

mv * .

작동하지 않았다; 다음과 같은 많은 경고를 받았습니다.

mv: wil and ./wil are identical

서브 디렉토리에 포함 된 파일은 고유 한 이름을 갖습니다.

답변:


22

다음 -mindepth옵션을 사용할 수도 있습니다 .

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(함께 -maxdepth파일을 수집 할 계층 레벨을 제한 할 수도 있습니다.)

내가 사용 mv -i하기 위해 ( "상호 작용") mv파일을 덮어 쓰기 전에 부탁드립니다. 많은 서브 디렉토리를 사용하면 경고하려는 이름 충돌이있을 수 있습니다.

--옵션은 옵션 처리를 중지하므로 mv하이픈으로 시작하는 파일 이름으로 혼동되지 않습니다.

빈 하위 디렉토리 전체를 정리하십시오.

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

파일을 덮어 쓰지 않음으로써 파일을 덮어 쓰는 문제를 건너 뛸 수있는 방법이 있습니까?
Filnor

2
mv : 옵션 : -n, --no-clobber기존 파일을 덮어 쓰지 않습니다. 에 관심이 있으실 수도 있습니다 -b, --backup.
Florian Jenn

5

이 시도:

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

-print0xargs지금 문의 목록을 생성하는 실행합니다. -J %플래그 수단은, 여기에 목록 요소를 삽입, 그래서 mv $FILE .발견 된 모든 파일에 대해 실행됩니다.

위의 내용은 BSD xargs에서 작동합니다. GNU 버전 (Linux)을 -I %사용하는 경우 대신-J %


0

배쉬 4 :

shopt -s globstar
for file in **; do [[ -f "$file" ]] && mv "$file" .; done

0
mv */* .

모든 서브 디렉토리의 모든 파일을 현재 디렉토리로 이동합니다.

정리가 필요한 경우 사용할 수 있습니다

find . -type d -empty -delete

빈 하위 디렉토리가 모두 삭제됩니다.


-2

1 빠른 속임수, 파일에 확장자가있는 경우에만 작동합니다 (점 포함).

mv *.* subdir/
mv .* subdir/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.