Linux
刪除除 csv 文件 Bash 腳本之外的所有內容
我想從文件夾中刪除除 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/
為將阻止腳本完全找到rm
andcp
命令。
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