删除前写入文件名
Write the file name before deleting
我想删除目录中的所有.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
如何让它把每个文件放在一个新行上,以及如何在路径前添加一条消息,比如 "The deleted file is: "
谢谢!
find . -name "*.png" -delete -print "\n" >> log.txt
因为你在 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
您可以用这个谓词替换 -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
使用 bash、rm
、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
。
我想删除目录中的所有.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
如何让它把每个文件放在一个新行上,以及如何在路径前添加一条消息,比如 "The deleted file is: "
谢谢!
find . -name "*.png" -delete -print "\n" >> log.txt
因为你在 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
您可以用这个谓词替换 -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
使用 bash、rm
、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
。