Grep
使用 ls grep 和 rm 刪除目錄中的文件
我的項目根目錄上有一個帶有這一行的 bash 文件
$ ls | grep -P '^some_pattern_matching_regex_goeshere.txt$' | xargs rm -f
上面的行從項目根目錄中刪除了所有
.txt
文件,但是當我將所有 .txt 文件推送到另一個文件夾,例如**process_logs/**並嘗試使用相同的命令時ls
,它不起作用。grep``rm
這是我嘗試但無法刪除process_logs目錄中的文件的方法。
$ ls process_logs/ | grep -P '^some_pattern_matching_regex_goeshere.txt$' | xargs rm -f
注意:我也嘗試過使用簡單正則表達式模式的命令,例如
ls process_logs/ | grep -P '^*.txt$' | xargs rm -f
從目錄中刪除文件,但它不起作用。
嘗試
find
改用。如果您不想find
遞歸,可以使用深度選項:find /process_logs -maxdepth 1 -mindepth 1 -type f -name 'some_shell_glob_pattern_here' -delete
ls
不建議解析 的輸出,因為ls
它並不總是準確的,因為會ls
列印出人類可讀的文件名版本,這可能與實際文件名不匹配。有關更多資訊,請參閱解析 ls wiki 文章。
我同意使用 find 是更好的選擇。但我想補充一下為什麼你的命令不起作用。
你的命令:
$ ls process_logs/ | grep -P '^some_pattern_matching_regex_goeshere.txt$' | xargs rm -f
ls
輸出沒有路徑的文件名。但是您沒有將路徑添加到rm
. 所以它會嘗試從你目前/根目錄的子目錄中刪除文件名。嘗試
$ cd process_logs/; ls | grep -P '^some_pattern_matching_regex_goeshere.txt$' | xargs rm -f
或者
$ ls process_logs/ | grep -P '^some_pattern_matching_regex_goeshere.txt$' | xargs -i rm -f "process_logs/{}"