[操作疑難] 想寫個 scripts 鏟垃圾隱藏檔

本帖最後由 奶茶走甜 於 2016-12-11 07:57 編輯

呢類垃圾隱藏檔個名係同所在 Directory 同名的,例如:
/mnt/SD/temp1/.temp1
/mnt/SD/temp1/Temp2/.Temp2

我試過以下呢個係可行的:
  1. L=`find /mnt/SD -type d`
  2. for D in $L
  3. do
  4.     F=$(find $D -type d | sed 's!.*/!!')
  5.     if [ -f "$D/.$F" ]
  6.     then
  7.         rm -f "$D/.$F"
  8.     fi
  9. done
複製代碼
我想問吓有冇機會會報錯或誤刪?或者 CHING 們有冇另一個更好的?
多謝指教!

更新:
上面嗰個錯咗,發現第二次 find 會對 subdirectory 重複咁做,同埋會出錯
改成咁:
  1. L=`find /mnt/SD -type d`
  2. for D in $L
  3. do
  4.     F=$(echo $D | sed 's!.*/!!')
  5.     if [ -f "$D/.$F" ]
  6.     then
  7.         rm -f "$D/.$F"
  8.     fi
  9. done
複製代碼

回覆 1# 奶茶走甜

I have it the other way ..
DIR=/mnt/SD
f=`find $DIR -name ".*" `
for F in $f
do
BASENAME=`basename $F`
DIRNAME=`dirname $F`
D=`basename $DIRNAME`
if [  ".$D" =  "$BASENAME" ]
then
        echo "rm -rf $DIRNAME/$BASENAME"
fi
done

TOP

回覆 2# theluxman

我嗰個其實錯咗,你個如果 hidden files 唔多應該仲會快啲
多謝指教

TOP

本帖最後由 cal22cal 於 2016-12-11 15:36 編輯
  1. cd /mnt/SD
  2.   find . -type f -name ".*" -printf "%f\0"  | xargs -0 -I{} find . -path ".*{}/{}" -printf "cp %P /tmp/test_test/%P\n"
複製代碼


edit:-
missing a /
-path ".*/{}/{}"
edit:-
唉吔吔,睇錯題目,0分,應該係咁
find /mnt/SD -type f -name ".*" -printf "%f\0"  | sed -z 's/^.//'  | xargs -0 -I{} find /mnt/SD -type f -path  '*/{}/.{}'  -printf "cp \"%p\" \"/tmp/test_test/%P\"\n" | sort | uniq

code 唔見咗啲嘢,要 " 包住個 fullpath
"cp \"%p\" \"/tmp/test_test/%P\"\n"

TOP

相關文章