私の知る限りfind
、ファイルからパターンを読み取るように指示するオプションはありません。簡単な回避策は、除外するパターンをファイルに保存し、そのファイルをリバースの入力として渡すことですgrep
。例として、次のファイルとディレクトリを作成しました。
$ tree -a
.
├── a
├── .aa
├── .aa.bak
├── a.bck
├── b
├── .dir1
│ └── bb1.bak
├── dir2
│ └── bb2.bak
├── b.bak
├── c
├── c~
├── Documents
│ └── Documents.bak
├── exclude.txt
├── foo.backup
└── Music
└── Music.bak
私はあなたが正しく掲載例を理解した場合は、移動したいa.bck
、.aa.bak
、b.bak
、c~
、foo.backup
及びdir2/bb2.bak
ゴミや休暇に.aa.bak
、.dir1/bb1.bak
、Documents/Documents.bak
とMusic/Music.bak
どこにあります。したがって、exclude.txt
次の内容のファイルを作成しました(必要なだけ追加できます)。
$ cat exclude.txt
./.*/
./Music
./Documents
./.*/
元の検索.foo
結果が現在のディレクトリにある隠しバックアップファイル()を移動するが、隠しディレクトリ(.foo/bar
)にあるバックアップファイルは除外することを理解しているので、使用しました。したがって、find
コマンドを実行しgrep
て、不要なファイルを除外するために使用できます。
$ find . -type f | grep -vZf exclude.txt | xargs -0 --no-run-if-empty trash-put
Grepオプション:
-v, --invert-match
Invert the sense of matching, to select non-matching
lines. (-v is specified by POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty
file contains zero patterns, and therefore matches
nothing. (-f is specified by POSIX.)
-Z, --null
Output a zero byte (the ASCII NUL character) instead of
the character that normally follows a file name. For
example, grep -lZ outputs a zero byte after each file
name instead of the usual newline. This option makes
the output unambiguous, even in the presence of file
names containing unusual characters like newlines.
This option can be used with commands like find
-print0, perl -0, sort -z, and xargs -0 to process
arbitrary file names, even those that contain newline
characters.