フォルダに/photo
多くのファイルがあるとします。
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
nodeletelist.txt
このテキストファイルには、削除しないファイルリストの名前とともにファイル名があります。
1.jpg
2.jpg
3.jpg
nodeletelist.txt
ファイルを削除するには:
4.jpg
...
10.jpg
ファイルを除いて1.jpg
、2.jpg
とは何3.jpg
ですか?nodeletelist.txt
nodeletelist.txt
ベストアンサー1
GNUの発見はありますか?
find photo -mindepth 1 -maxdepth 1 -regextype awk \! -regex ".*/($(tr '\n' '|' < photo/nodeletelist.txt)nodeletelist.txt)" -delete
これはtr(1)
およびを使用して達成されますfind(1)
。
- ファイルを次にリダイレクト
tr
- 改行を「OR」を意味する垂直バーに置き換えます。
- サブシェルから戻る
- ファイルが改行で終わる場合は、最後にフラグ値を追加します。 (この例ではあなたの名前をウォッチャーとして使用するため、
nodeletelist.txt
このソリューションを使用する場合はファイルにファイル名を含める必要はありません。) - ディレクトリ内の1レベル以下のアイテムを検索してください。
photo
- awk正規表現を使用して、上記の手順1〜4で返された文字列を一致させます。
- ファイルの削除いいえ正規表現と一致する(
!
「NOT」を意味するため)
ここに必要な拡張構文がそのフラグに適用されるため、ここのフラグは、、、またはに-regextype
設定することもできます。デフォルトのfindutils正規表現、posix-basic、emacs、sedなどは、このコマンドでは機能しません。posix-extended
egrep
posix-egrep
gnu-awk
posix-awk