Linux

刪除除 csv 文件 Bash 腳本之外的所有內容

  • May 10, 2019

我想從文件夾中刪除除 csv 文件之外的所有內容

我正在嘗試使用 bash 腳本,但出現此錯誤:

syntax error near unexpected token `('

這是我的腳本:

PATH=/tmp/

run_spark_local
rm -v !($PATH*.csv)

cp -r $PATH /data/logs/

我也試過

rm -v !("$PATH*.csv")

您應該避免設置PATH變數。您的 shell 使用它來查找有效命令,將其設置/tmp/為將阻止腳本完全找到rmandcp命令。

find您可以使用以下命令完成您想要的操作:

find /tmp -not -name '*.csv' -not -path /tmp -exec rm -vr {} \;

注意:這也會刪除 /tmp 下的所有子目錄。如果您不希望這樣做,您必須更改為:

find /tmp -not -name '*.csv' -type f -exec rm -v {} \;

另一個注意事項:這仍將遞歸到子目錄並刪除其中的文件。如果您不想要這個,您可以使用以下maxdepth參數:

find /tmp -not -name '*.csv' -maxdepth 1 -type f -exec rm -v {} \;

額外說明:我永遠不會執行find ... -exec您在網上找到的命令,而不驗證它是否會首先執行您需要它執行的操作。你應該執行:

find /tmp -not -name '*.csv' -not -path /tmp

-exec rm -vr {} \;並在添加位之前驗證它是否只找到您想要的文件。

請不要將 $PATH 設置為環境變數。

對於 BASH,只要啟用了extglob shell 選項(這是許多 linux 發行版的預設設置),它只是:

rm !(*.csv)

使用文件夾路徑,它將類似於…

rm yourfolder/!(*.csv)

如果您認為您的環境中未啟用 extglob,請執行以下操作:

shopt -s extglob

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