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

我怎样才能让它把每个文件放在一个新的行上,我怎样才能在路径之前添加一条消息,比如“删除的文件是:”

谢谢!

4

4 回答 4

2

由于您在 Windows 上(无论出于何种原因... ;)),您可能希望使用-printf它来生成 Windows 样式的行尾:

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

或者,只需配置您使用的文本编辑器来查看 UNIX 行结尾的输出文件。

要添加消息:

find . -name '*.png*' -delete -printf "Deleted: %p\r\n" >> log.txt
于 2017-09-15T11:30:45.847 回答
1

寻找 。-name "*.png" -delete -print "\n" >> log.txt

于 2017-09-15T11:30:15.103 回答
1

您可以-print用此谓词替换谓词:

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

使命令看起来像:

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

如果你有 GNU find,那么你可以-printf这样使用谓词:

find . -name "*.png" -delete -printf 'The deleted file is: %p\n' >> log.txt
于 2017-09-15T11:31:23.477 回答
1

rm使用 bash 、yes和 awk的更直观 (TGIF :) 方式。首先,测试东西:

$ 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如有需要请报价。

于 2017-09-15T13:42:23.237 回答