2017-09-15 153 views
1

我想刪除目錄中的所有.png文件並將刪除文件名保存在文本文件中。我設法用下面的命令來做到這一點:在刪除之前寫入文件名

find . -name "*.png" -delete -print >> log.txt 

一切工作正常,並在日誌中我得到刪除文件的整個路徑。但是,如果有多個文件要刪除,放在日誌中的名稱全部在同一行上。

C:/Users/Dragos.Cazangiu/Desktop/TesteCyg/CMDER/New Bitmap Image3.pngC:/Users/Dragos.Cazangiu/Desktop/TesteCyg/CMDER/2.pngC:/Users/Dragos.Cazangiu/Desktop/TesteCyg/CMDER/New Bitmap Image.png 

我怎樣才能使它把每個文件在新行,也是我怎麼能路徑之前添加消息,內容如「刪除的文件是:」

謝謝!

回答

1

你可以用這個謂詞替換-print謂詞GNU find,那麼你可以使用-printf pred通過使用bash,rmyes和awk

find . -name "*.png" -delete -printf 'The deleted file is: %p\n' >> log.txt 
+0

我沒有明確指出printf'\ n'。這實際上是默認設置。另外'{} \;'在這裏是錯誤的。這是'-exec'選項特有的語法。不知道爲什麼這被接受。 – hek2mgl

+0

@ hek2mgl:你讀過(並理解)了代碼嗎? –

+0

我承認我錯過了你'-exec printf' ..但是這或多或少是一樣的。你仍在輸出默認的'\ n'。 – hek2mgl

1

找到。 -name 「* .png格式」 -delete -print 「\ n」 >> log.txt的

2

既然你是在Windows(不管出於什麼原因...;)),你可能想以此來使用-printf來生產的Windows風格的行結束符:

find . -name '*.png*' -delete -printf "%p\r\n" >> log.txt 

或者只是配置您正在使用,以查看輸出文件,以UNIX行結束的文本編輯器。

要添加一個消息:

-exec printf 'The deleted file is: %s\n' {} \; 

,因此命令看起來像:

find . -name "*.png" -delete -exec printf 'The deleted file is: %s\n' {} \; >> log.txt 

如果你有

find . -name '*.png*' -delete -printf "Deleted: %p\r\n" >> log.txt 
1

一個更直觀(TGIF :)方式:icate爲如此。首先,測試的東西:

$ touch 1.png 2.png 3.png 

然後:

for i in *.png ; do yes | rm -i $i 2>&1 >/dev/null | awk '{gsub(/^.|..$/,"",$NF);print $NF}' >> file ; done 
$ cat file 
1.png 
2.png 
3.png 

或:

for i in *.png          # daloop 
do             # yes sir 
    yes |            # nod to pipe 
    rm -i $i 2>&1 >/dev/null |       # rm interactively piping the stderr 
    awk '{ gsub(/^.|..$/,"",$NF); print $NF }' >> file # ... to awk 
done             # phew 

報價$i如果需要的話。

+0

這更直觀嗎? – hek2mgl

+0

@ hek2mgl你可能錯過了:) _intuitive_和_TGIF _... –

+1

之後,好像我錯過了那個 – hek2mgl