删除目录中的文件并打印删除的文件名

时间:2018-09-26 14:04:31

标签: linux find echo delete-file

我想删除目录中除特定文件之外的文件,如果文件被删除,则显示一条消息。

find . ! -name 'name' -type f -exec echo 'removed files:' rm -v -f {} +

当我运行此命令时,它将打印:

removed files: rm -v -f ./aaavl ./aaavlpo

我要打印putput,例如:

removed files:
./aaavl
./aaavlpo

我应该怎么做?

2 个答案:

答案 0 :(得分:0)

只需在Bash循环中使用find即可修改输出。

给出:

$ ls -1
file 1
file 2
file 3
file 4
file 5

您仍然可以根据需要用find循环和取反。只需使用Bash删除并报告:

$ find . ! -name *3 -type f | while read fn; do echo "removing: $fn";     rm "$fn"; done
removing: ./file 1
removing: ./file 2
removing: ./file 5
removing: ./file 4

$ ls -1
file 3

该循环将适用于文件名带有\n以外的其他文件名。

如果文件名中可能包含\n,请使用xargsNUL分隔符:

$ find . ! -name *3 -type f -print0 | xargs -0 -n 1 -I% bash -c ' echo "%" ; rm "%" ;' 

并根据需要在循环或echo "removed files:"管道上方添加标题xargs

答案 1 :(得分:0)

也许这不是更好的方法,但是...

1-将文件名保存为.txt:   find -name'name'-type f -exec echo >> test.txt {} \;

2保存文件后,执行文件删除   找。 ! -name'name'-type f -exec rm -f {} +