ディレクトリのファイル拡張子をホワイトリストに追加しますか?

ディレクトリのファイル拡張子をホワイトリストに追加しますか?

フォルダ内の特定のファイル拡張子をホワイトリストに追加できますか?

例:音楽アルバムをフォルダに移動したいのですが、*.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場合)rsynctargetまったく同じ対応する画像ファイルは除く)。

関連情報