내가 아는 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
그렙 옵션 :
-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.