Grep

使用 ls grep 和 rm 刪除目錄中的文件

  • May 20, 2018

我的項目根目錄上有一個帶有這一行的 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/{}"

引用自:https://unix.stackexchange.com/questions/440534