フォルダ内の特定のファイル拡張子をホワイトリストに追加できますか?
例:音楽アルバムをフォルダに移動したいのですが、*.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
まったく同じ対応する画像ファイルは除く)。