2
我正在嘗試編寫一個bashrc函數,以便在與「-exec rm」配對時向find命令添加安全檢查。該腳本將以「-exec rm」開頭的所有內容剪掉,並用「-print0」代替,然後傳遞給sed,以便在用戶使用帶引號的experssion時重新添加缺少的引號。/etc/bashrc中的函數未通過變量傳遞引號
我遇到了一個問題,我通過sed添加的引號沒有被傳遞給執行find命令的行。
改寫find命令,並重新添加引號:
FIND_VAR=$(echo "[email protected]" | sed "s/-exec rm.*/-print0/g" | sed 's/\*.*/"&" /g' | sed 's/ "/"/g')
運行與修改find命令:
FIND_LIST=$(/bin/find $FIND_VAR | sed 's|\./| \./|g')
我想做到的是,如果用戶鍵入以下命令:
find ./ -type f -name "*.txt" -exec rm -rf {} \;
該命令通過bashrc重寫爲:
find ./ -type f -name "*.txt" -print0 | sed 's|\./| \./|g'
這產生每個間隔開,其被傳遞到一個修改的RM功能的文件的列表:
./file1.txt ./file2.txt ./file3.txt ...
全功能如下以供參考:
function find() {
if echo "[email protected]" | grep -q '-exec rm' ; then
echo "Found rm command as part of find"
FIND_VAR=$(echo "[email protected]" | sed "s/-exec rm.*/-print0/g" | sed 's/\*.*/"&" /g' | sed 's/ "/"/g')
echo "/bin/find $FIND_VAR"
FIND_LIST=$(/bin/find $FIND_VAR | sed 's|\./| \./|g')
echo "$FIND_LIST"
echo "rm$FIND_LIST"
else
/bin/find "[email protected]"
fi
}