한 디렉토리에서 다른 디렉토리로 파일을 반복적으로 복사


11

폴더에 모든 음악이 /media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside있습니다. 모든 mp3를 복사하여 다음과 같이 /media/kalenpw/HDD/Music사용하고 싶습니다.

cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music

그러나 이것은 루트 음악 폴더의 mp3 만 복사했으며 아티스트 하위 디렉토리를 열고 해당 파일을 복사하지 않았습니다.

나는 -R모든 파일을 재귀 적으로 복사 할 것이라는 인상을 받았다 . 목표를 달성하려면 어떻게해야합니까?

답변:


19

사용하다:

find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;

명령 작동하지 않는 이유는 와일드 카드를 (포함하는 이름입니다 *.mp3세 개의 파일을 가지고 그렇게하면 실행되는 명령을하기 전에 확장된다) ( 01.mp3, 02.mp3, 03.mp3) 당신의 효과적인 명령했다 :

cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music

보시다시피이 -R경우에는 효과가 없습니다.


파일이로 끝나는 경우 -iname대신에 권장 합니다 . -name.MP3
Olathe

감사합니다. 아니면 적어도 작업 과정에 있습니다.
kalenpw

5

*.mp3파일 / 디렉토리 이름으로 끝나는 파일 / 디렉토리 이름 을 구체적으로 언급 했습니다 .mp3.

그래서 끝나는 모든 파일 .mp3/media/kalenpw/MyBook/Music/디렉토리와 유사하게이 끝나는 임의의 디렉토리 .mp3에이 /media/kalenpw/MyBook/Music/반복적으로 복사됩니다. 일치하는 파일 / 디렉토리가 없으면 아무 것도 복사되지 않습니다.

이제 모든 .mp3파일을 /media/kalenpw/MyBook/Music/recursivley에서 디렉토리 로 복사하십시오 /media/kalenpw/HDD/Music/.

  • 사용 bash:

    shopt -s globstar
    cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
    
  • 사용 find:

    find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
    

고마워, techraf가 먼저 대답했기 때문에 그들의 대답을 받아 들였습니다.
kalenpw

1

cpr 을 사용할 수도 있습니다 .

$ cd /media/kalenpw/HDD/Music
$ cpr -p '/\.mp3$/' '/media/kalenpw/MyBook/Music/'

-p cpr 이 없으면 복사 된 파일 이름의 전체 디렉토리 경로가 유지됩니다.
-r대신 -p'/media.../Music/'아래에 경로를 유지하기 위해를 사용할 수 있습니다 .
또한 cpr반복되는 파일 이름에 '0001'로 시작하는 숫자를 추가하여 파일을 덮어 쓰지 않도록주의합니다.


1

당신이 한 무리가 있다고 가정하자 .docx, .mp3, .txt그리고 .xlsx이 디렉토리 구조에 저장된 파일을 :

/files/
/files/dir1/
/files/dir1/dir11/
/files/dir1/dir12/
/files/dir1/dir13/
/files/dir2/
/files/dir3/
/files/dir3/dir31/
/files/dir3/dir32/
/files/dir4/
/files/dir5/
/files/dir51/
/files/dir52/
/files/dir53/
/files/dir54/

... 발견 된 모든 .mp3파일 을 복사하기 위해 모든 해당 디렉토리로 재귀를 원 /home/me/music/하지만 대상 디렉토리에 디렉토리 트리를 유지 하지 않으려는 경우 (즉, 발견 된 모든 .mp3파일 /home/me/music/을 각각의 디렉토리에 복사하는 대신 복사하려는 경우) 예컨대 /home/me/music/dir1/, /home/me/music/dir1/dir11/등등).

이 경우, 쉘 터미널 (bash)에서 먼저 파일 검색 루트에 액세스하기 위해이 명령을 실행하십시오.

cd /files

...이 명령을 실행하십시오.

for i in `find . -iname '*.mp3'`; do cp $i /home/me/music/; done

혹시 않는 대상에 소스의 디렉토리 트리를 유지 (실행 한 후 대신이 명령을 실행하려면 cd /files) :

find . -iname '*.mp3' | cpio -pdm /home/me/music/

위의 명령에서 검색이 대소 문자를 구분 (즉, 일치 .mp3, .MP3, .mP3.Mp3). 검색에서 대소 문자를 구분 하려면 -name대신 사용하십시오 -iname(예 : 문자열을 사용 -name하면으로 .mp3끝나는 파일 .mp3.MP3, .mP3또는로 끝나지 않는 파일과 일치 함 .Mp3).


디렉토리 구조를 유지 하려는 경우 소스 디렉토리에서이 명령을 실행하십시오. 를 실행하면 find /source/dir -iname '*.mp3' | cpio -pdm /home/me/music// home / me / music / source / dir이 생성되고 파일이이 새 위치로 복사됩니다.
Gautam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.