2017-09-15 117 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