폴더의 특정 파일 확장자를 화이트리스트에 추가할 수 있나요?
예: 음악 앨범을 폴더로 이동하고 싶지만 *.png, *.jpg 등을 허용하지 않아 표지 아트를 전송하고 싶지 않습니다.
답변1
예를 들어 복사 스크립트에서 복사하는 동안 필터링할 수 있습니다. 또는 복사 작업 후에 필터를 적용하여 원하지 않는 콘텐츠를 제거할 수 있습니다.허용하다또는 필요합니다.
답변2
문제는 확실히더 넓게질문보다 더 중요하므로 답변이 다를 수 있습니다.
처음에 Unix 계열 시스템은 파일 확장자의 개념을 인식하지 못했지만 일부 소프트웨어는 확장자를 인식하여 작업을 조정할 수 있습니다.
또한,경로명 확장파일 시스템(계층적 파일 시스템)의 지정된 수준에 있는 기존 파일 또는 디렉터리와 일치해야 합니다.
mv
전체 디렉터리 계층을 이동할 수 있으므로 mv
일치하는 디렉터리에 있는 파일도 모호하게 이동할 수 있습니다.
간단한 해결책은 필요한 파일에 대한 읽기 권한을 제거하여 파일이 복사되는 것을 방지하는 것입니다.
prompt% cp -vr album /tmp
'album/' -> '/tmp/album'
'album/song.mp3' -> '/tmp/album/song.mp3'
'album/covert.png' -> '/tmp/album/covert.png'
cp: cannot open 'album/covert.png' for reading: Permission denied
prompt% ls -l album/covert.png
--w-r--r-- user user 8 Sep 07:27 album/covert.png
읽지 못하도록 보호된 파일을 제외하고 파일은 대상 디렉터리로 전송됩니다.
답변3
이 문제를 해결하는 쉬운 방법은 모든 것을 복사한 다음 불필요한 파일을 삭제하는 것입니다.
rsync
전체 source
디렉토리 구조를 에 복사한 target
후 다음 을 사용하여 find
불필요한 파일을 삭제합니다 target
.
rsync -a source/ target
find target -type f \( -name '*.jpg' -o -name '*.png' \) -delete
보다 효율적인 접근 방식은 필터링을 사용하여 rsync
필요하지 않은 파일을 전송하지 않는 것입니다.
rsync -a --exclude='*.png' --exclude='*.jpg' source/ target
두 경우 모두 --delete
원본 디렉터리에 존재하지 않는 파일을 삭제하려는 경우( 두 디렉터리를 모두 삭제하려는 --delete-excluded
경우 )rsync
target
정확히 똑같다해당 이미지 파일은 제외).