중첩 된 하위 디렉토리에서 우분투의 다른 폴더로 파일을 어떻게 이동합니까? (많은 하위 폴더를 제거하려고 시도)


36

디렉토리가 아닌 파일 을 다른 폴더 / 부모 폴더로 어떻게 이동 합니까?

일부 .mp3 파일이 하위 폴더에 6 레벨 깊숙하게 묻혀있는 폴더 구조가 매우 추악합니다.

우분투를 사용하여 하위 디렉토리가없는 하나의 디렉토리에있는 모든 파일 (대부분 .mp3이지만 전부는 아님)으로 끝내고 싶습니다.

도움?

답변:


48

askubuntu-QA 에는 큰 대답이 있습니다 .

이렇게하려면 터미널을 열고 다음 명령을 실행하십시오.

mv  -v ~/Downloads/* ~/Videos/

모든 파일과 폴더가 다운로드 폴더에서 비디오 폴더로 이동합니다.


폴더가 아닌 모든 파일을 이동하려면 :

그러나 다운로드 폴더에서 비디오 폴더로 모든 파일 (폴더는 아님)을 이동하려면이 명령을 사용하십시오.

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

하위 폴더가 아닌 다운로드 폴더에서만 파일을 이동하려면

Downloads 폴더의 모든 파일을 이동하지만 Download 폴더의 폴더에있는 파일은 이동하지 않으려면 다음 명령을 사용하십시오.

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

여기서 -maxdepth옵션은 찾기가 얼마나 깊이 시도해야 하는지를 지정합니다. 1즉, find 명령에 지정된 디렉토리 만 의미합니다. 다음을 사용하여 시도 할 수 있습니다 2, 3또한 테스트합니다.

자세한 설명 은 Ubuntu find 맨 페이지 를 참조하십시오 .

출처


내가하고 싶은 일은 모든 파일을 폴더에 복사하는 것입니다 .mv를 cp로 변경해야합니까? 나는 리눅스에
익숙하지 않다

13

해결책

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

이 명령은 /src/dir모든 하위 디렉토리를 포함하여 아래의 모든 일반 파일을 찾고 command /dst/dir를 사용 하여 로 이동합니다 mv. 디렉토리를 대체하십시오. 이름이 같은 파일은 자동으로 이름이 바뀝니다.

이동할 파일 선택

MP3 파일 만 이동 -iname "*.mp3"하려면 다음에 find명령 에 옵션을 추가하십시오 -type f.

c0dev의 답글 비교

c0dev의 회신에있는 두 번째 명령 만 질문에 대답합니다. 아래는이 답장과 어떻게 비교 되는가입니다. 포인트 3과 포인트 4는 여기와 같은 방식으로 다른 답변으로 해결할 수 있습니다.

  1. mv솔루션을 제외하고 는 또는 -exec +같은 추가 명령을 호출 하고 파일 이름을 두 번 넘겨 줄 필요가 없습니다 .xargsparallel
  2. 다른 응답은 동일한 이름을 가진 파일을 자동으로 덮어 씁니다. 여기에서 옵션 덕분에 파일 이름이 자동으로 바뀝니다 --backup=numbered. 불행하게도 접미사가 같은 이러한 백업 ~3~은 기본적으로 대부분의 파일 관리에서 숨겨집니다. 불행히도 mv접미사를 변경할 수는 없지만 추가 명령으로 쉽게 사후 처리 할 수 ​​있습니다. 이것은 GNU 확장입니다.
  3. 이와 반대로 -print0 -exec command {} +IEEE Std 1003.1 (POSIX), ISO / IEC 9945 및 The Single UNIX Specification 표준의 일부입니다. 따라서 더 휴대하기 쉬워야합니다. 참고 IEEE 표준 1003.1, 2004 판 , IEEE 표준 1003.1, 20130,000,243 : "발견"에 -print0 추가 . 그러나 어쨌든 필요한 -t스위치 mv는 GNU 확장이므로 POSIX 시스템간에 전체 명령을 이식 할 수는 없습니다.

참고 :이 경우로 find시작하는 경로를 생성 할 수 있는 경우 -( find현재 그러한 구현에 대해 알지 못합니다 .) {}앞에 옵션 끝 표시기 가 있어야합니다 --.


오류 : 찾기 :`-exec '에 대한 인수 누락
Chris

@Chris : 네 말이 맞아, {}마지막 논증처럼 보인다 . 수정되었습니다.
pabouk

@Chris : 원하는대로 작동합니까? 그렇다면 대답을 수락하여 질문이 "해결되지 않음"으로 표시되지 않을 수 있습니다.
pabouk

이것은 내가 실행 중이며 디렉토리를 찾을 수없는 오류가 발생합니다.
Chris

내가 실행중인 것 : clstal @ clap : ~ $ ls 1st script.R Firefox_wallpaper.png part1vidproj zotero pdf manager 데스크탑 mozilla.pdf 그림 문서 부모 비디오 clstal @ clap : ~ $ 찾기 / source / directory -type f -exec mv -t / destination / directory {} + 찾기 :`/ source / directory ': 해당 파일 또는 디렉토리 없음
Chris

2

불행히도, 표시된 솔루션에 대해 언급 할만 큼 높은 평판을 얻지 못했습니다. 그러나 나는 내가 겪은 문제에 대해 다른 사람들에게 경고하고 싶었습니다. 꽤 아마추어입니다. 그러나 몇 가지 일을 할 때는 처음에는 마음에 들지 않을 수 있습니다. 바라건대, 그것은 다른 사람들을 도울 것입니다.

문제

명령을 시작한 후 다음 메시지의 변형이 제공되었습니다. 그런 다음 명령은 여러 파일을 작성합니다.

mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file

원인

/src부모입니다 /dst(예 :) /src/../dst/.

해결책

더 나은 해결책이있을 수 있지만 파일을 내 외부의 임시 디렉토리로 이동 /src한 다음 명령을 다시 실행하여 /src/../dst원하는 디렉토리 내에 다시 배치합니다 .


2

내 라이너 하나-이것은 Mac에서 작동하지만 * nix에서도 작동해야합니다. 부모 디렉토리에서 시작하십시오.

# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf

첫 번째 부분은 모든 하위 폴더에서 명령을 실행 한 실제 폴더로 모든 것을 이동합니다. 두 번째 부분은 하위 디렉토리가 비어 있는지 확인하고 (이제 :-)해야하며 하위 디렉토리없이 모든 것을 얻을 수 있도록 삭제합니다.


(1) 귀하의 답변이 무엇이며 다른 답변보다 장점이 무엇인지 설명하십시오 (매우 유사 함). 의견에 응답하지 마십시오.  더 명확하고 완전하게 답변을 편집 하십시오. (2) -not운영자는 비표준이므로 귀하의 명령은 다른 것보다 이식성이 떨어집니다.
Scott

찾기 -not -type d -print0 | xargs -0J % mv -f %입니다. ; 찾기 유형 d-깊이 -print0 | xargs -0 rm -rf 폴더에서이 명령을 실행하여 하위 폴더, 내가 있던 폴더를 삭제 한 다음 상위 폴더로 이동했습니다. 운 좋게도 파일 관리자를보고 명령을 중지하고 테스트 폴더에서 실행했습니다.

1

터미널을 열고 파일이있는 폴더 폴더로 cd 한 다음 실행 find . -mindepth 2 -type f -print -exec mv {} . \; 하여이 하위 디렉토리의 모든 파일을 현재 디렉토리로 이동하십시오.

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