현재 하위 폴더 내의 모든 파일을 이동하는 방법은 여기에서 확인하세요.

현재 하위 폴더 내의 모든 파일을 이동하는 방법은 여기에서 확인하세요.

50개의 폴더와 일부 하위 폴더에 총 1000개가 넘는 오디오 파일이 있습니다. 모든 하위 폴더를 삭제하고 모든 파일을 현재 레벨에 넣어야 합니다. 이것을 시도했지만 mv */* ./불평합니다: 매개변수 목록이 너무 깁니다.

답변1

오디오 파일 확장자가 .mp3라고 가정합니다.

find <AudioFolderPath> -name '*.mp3' -exec mv -it <YourTargetFolder> {} +

노트:

  • .mp3오디오 파일 확장자로 바꾸세요 .

  • <AudioParentFolderPath>하위 폴더가 포함된 상위 폴더로 대체됩니다 .

  • <YourTargetFolder>모든 파일을 배치해야 하는 폴더의 경로로 바꾸십시오 .

  • 서로 다른 하위 폴더에 있는 두 파일의 이름이 같은 경우하나만 이동됩니다.

편집하다:~처럼코스타스" -i스위치는 mv대화형이며 기존 파일을 덮어쓰기 전에 메시지를 표시합니다." 라고 말합니다.

답변2

find . -type f -mindepth 2 -exec mv -t ./ {} +

이 명령은 동일한 이름을 가진 모든 파일을 덮어씁니다. 덮어쓰기 전에 메시지를 표시하는 데 이를 사용할 수 있습니다.

find . -type f -mindepth 2 -exec mv -it ./ {} +

설명하다

  • -type f: 일반 파일만 찾습니다.
  • -mindepth 2: 하위 디렉터리에 있는 파일만 찾습니다.
  • -exec mv -it ./ {}: -exec"이것을 실행하라"는 뜻주문하다발견된 각 파일에."는 대화식 {}으로 filename. 스위치로 대체되어 -i기존 mv파일을 덮어쓰기 전에 메시지를 표시하고 -t대상 디렉터리를 ./.
  • +: 쉘이 작동할 수 있는 만큼의 파일을 하나의 인수 줄에 함께 넣습니다.주문하다인용하다주문하다최소 횟수(일대일이 아니라 일대다)입니다.

빈 폴더를 추가로 삭제하려면 동일한 수신 방법을 사용할 수 있습니다.

find . -type d -empty -delete

답변3

execve()예, 이는 외부 명령을 실행할 때 시스템 호출에 전달되는 인수 및 환경의 누적 크기에 대한 제한입니다.

의 경우 zsh내장 함수를 mv대신 사용할 수 있습니다.

zmodload -F zsh/files +b:zf_mv
zf_mv ./*/* .

또는 zargs목록을 관리 가능한 덩어리로 분할하는 방법을 사용하세요.

autoload zargs
zargs -Ifiles ./*/* -- mv files .

그리고 ksh93:

command -x mv ./*/* .

쉘이 내장된 GNU xargs및 GNU의 경우 (주로 주목할만한 예외):mvprintfmksh

printf '%s\0' ./*/* | xargs -r0 mv -t .

답변4

상당히 이식 가능한 솔루션은 다음과 같습니다.

각 하위 폴더에서 모든 파일을 찾아 현재 디렉터리로 이동합니다.

find ./*/ -type f -print | xargs mv -i "{}" ./

| egrep "\.au$|\.mp3$|\.ac3$"중간에 하나를 추가하여 찾은 파일이 오디오 확장자를 가진 파일인지 확인할 수 있습니다(모든 유형을 포괄하는 데 필요한만큼 확장자를 추가하세요. 저는 일반적인 확장자 3개만 제공했습니다) .

관련 정보