【发布时间】:2017-11-03 00:17:05
【问题描述】:
我想编写一个脚本,它接收一个文件夹并删除该文件夹中子文件夹中的所有文件。
例如:
- ABC
- a.txt
- b.txt
- efg
- e.txt
- x.txt
脚本在运行时,应该删除 a.txt、b.txt 和 e.txt 而不是 x.txt(因为它不在文件夹内)。
【问题讨论】:
我想编写一个脚本,它接收一个文件夹并删除该文件夹中子文件夹中的所有文件。
例如:
脚本在运行时,应该删除 a.txt、b.txt 和 e.txt 而不是 x.txt(因为它不在文件夹内)。
【问题讨论】:
在编写 bash 脚本时要决定的第一件事是决定要使用哪个命令。
find 命令递归返回文件夹中的所有文件。
find ${dir} -name "*.txt" -delete
上述命令在目录(存储在变量中的目录)中搜索以.txt 结尾的文件名并删除它们。
但是,如果您只想在子目录中查找文件怎么办?
您可以使用:
find ${dir}/*/ -name "*.txt" -delete
请注意我们如何添加/*/ 来表示该文件夹内所有文件夹的查找。
您还可以添加检查 -type f 以确认我们正在删除文件而不是其他任何内容。
【讨论】:
使用 find 命令:
示例test 文件夹结构:
$ tree test
test
├── abc
│ ├── a.txt
│ └── b.txt
├── efg
│ └── e.txt
└── x.txt
关键命令:
find test -mindepth 2 -type f -delete
查看结果:
$ tree test
test
├── abc
├── efg
└── x.txt
【讨论】:
这里是这个
find */ -name *.txt -type f | xargs rm -f
【讨论】: