DOS xcopy 명령 대체

DOS xcopy 명령 대체

DOS에는 다음 명령이 있습니다.

xcopy /s *.mp3 ..\TEMP2

우분투에서는 어떻게 할 수 있나요?

cp -r *.mp3 ../TEMP2

불행하게도 필터로 인해 경로가 없는 모든 mp3 파일을 재귀적으로 복사합니다 *.mp3.

cp -r *.* ../TEMP2

경로를 복사하지만 mp3 파일로 제한할 수는 없습니다.

rsync를 살펴봤지만 이해가 되지 않습니다.

답변1

우분투 도구의 힘은 도구들을 결합할 수 있다는 것입니다. 다음 명령은 현재 디렉터리와 하위 디렉터리에서 모든 .mp3 파일을 찾아 ../TEMP2/경로를 유지하면서 폴더에 복사합니다.

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3'.mp3- (대소문자 구분 안 함) 으로 끝나는 모든 파일을 찾습니다 .
    • -exec- 각 일치 항목에 대해 명령을 실행합니다.
      • install -D {} ../TEMP2/{}../TEMP/- 경로를 유지하기 위해 일치하는 파일을 복사합니다 . ( {}파일 이름을 포함한 경로로 대체됩니다)
    • \;- -exec명령 을 종료합니다

진행 상황을 확인하려면 -ls앞에 명령에 ("list")를 추가하세요 -exec. 뒤에 붙일 수도 있지만 \;, 이 경우에는 복사된 후에 이름이 표시됩니다. 예:

find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls

답변2

여러 가지 옵션이 있지만 정말 간단한 것은 없습니다. 유감스럽게도…

재동기화

rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2

이는 모든 파일을 제외( exclude="*")하지만 모든 디렉터리를 조사( include="*/")하고 모든 mp3 파일을 포함( include="*.mp3")하라는 의미입니다. mp3 파일이 포함되지 않은 디렉터리를 복사하지 않으려면 추가로 이 --prune-empty-dirs옵션이 필요합니다.

지퍼

zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip

첫 번째 명령은 모든 mp3 파일이 포함된 아카이브를 생성하고, 두 번째 명령은 대상 디렉터리에 콘텐츠의 압축을 풀고 성공한 경우 아카이브 파일을 삭제합니다.

찾다

find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"

../TEMP2이렇게 하면 먼저 디렉터리 구조를 만든 후 모든 mp3 파일을 찾아 디렉터리의 해당 경로에 복사합니다 ( install -D).

모두 복사하고 나머지는 삭제하세요

이는 파일이 몇 개만 있는 경우에만 의미가 있습니다.~하지 않다복사하고 싶은 것:

cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete

모든 파일을 복사한 다음 mp3 파일이 아닌 모든 파일을 삭제합니다.

관련 정보