Shell-Script
除了作為參數傳遞的某些特定文件之外,如何刪除文件?
任務是編寫一個帶有 n+1 個參數的 shell 腳本,其中第一個是目錄,其餘的是指定的文件,並將刪除除指定文件之外的所有文件。
例如呼叫
rmexcept . '*.jpg' '*.png'
cd $1 for i in “${@:2}” do find . -type f -not -name $i -delete done
這是我的嘗試。但是,它僅適用於 1 個指定文件(例如
rmexcept . '*.jpg'
)。如果有超過 1 個文件(例如rmexcept . '*.jpg' '*.png'
),則刪除所有文件。我不知道出了什麼問題,因為我相信我已經創建了一個 for 循環。
試試這個(內聯評論):
#!/bin/bash set -f # Prevent e.g. *.txt from being expanded here dir=$1 # Get the target directory and shift # remove from list of args cmd="find $dir -type f" while (( "$#" )) # While there are more arguments left do cmd="$cmd -not -name $1" # add to not match shift # and remove from list of arguments done cmd="$cmd -exec rm -i {} ;" # finally execute rm on the remaining matches echo $cmd # Print the final find command $cmd # And execute it
我添加
-i
了它,rm
以便在刪除每個文件之前詢問它。但是你當然可以調整它。