Bash
僅從某些子目錄中刪除匹配的文件
我有一個包含幾個子目錄的目錄;在每一個中,我都有一些文件。我只想
grep
對某些子目錄執行 a 以查找與查詢匹配的文件並將其刪除;類似的東西grep -rl --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | rm
,但我不想解析stdin
fromgrep
。我想我必須結合
find
andrm
,但我不知道如何。此外,似乎(至少在 Cygwin 中),我不能做 –exclude-dir={dir1, dir2},我必須拆分它們。這是一個小問題,但有人知道為什麼這不起作用嗎?
grep -rlZ --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | xargs -r0 rm -f
如果要
find
進行目錄遍歷:find . -type d \( -name dir1 -o -name dir2 \) -prune -o \ -type f -exec grep -lZ HUMAN {} + | xargs -r0 rm -f
便攜/標準,那必須是:
find . -type d \( -name dir1 -o -name dir2 \) -prune -o \ -type f -exec grep -q HUMAN {} \; -exec rm -f {} +
但這意味著
grep
每個文件執行一個。為了
--exclude-dir={dir1,dir2}
工作,您需要一個支持大括號擴展的 shell,如 csh、tcsh、ksh、zsh、bash 或 fish。