如何删除文件所在的父目录(上面只有一级),并使用find
命令找到
find . -type f -name "*.root" -size 1M
返回
./level1/level1_chunk84/file.root
所以,我想以递归方式删除level_chunck84目录,例如..
感谢
答案 0 :(得分:1)
您可以尝试以下内容:
find . -type f -name "*.root" -size 1M -print0 | \
xargs -0 -n1 -I'{}' bash -c 'fpath={}; rm -r ${fpath%%$(basename {})}'
find
+ xargs
组合很常见。请参阅man find
,您将找到一些示例,说明如何一起使用它们。
我在这里所做的只是将-print0
标志添加到原始查找语句中:
-print0 真正;在标准输出上打印完整文件名,后跟空字符(而不是-print的换行符) 使用)。这允许程序正确解释包含换行符或其他类型的空格的文件名 处理查找输出。此选项对应于xargs的-0选项。
然后将所有内容传送到xargs
,作为辅助工具来制作更多命令:
- 执行bash
子shell中的所有内容
- 将文件路径分配给变量fpath={}
- 从文件路径中提取dirname
$ {参数%%字} 删除匹配的后缀模式。这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配 参数的扩展值的尾部,则扩展的结果是参数的扩展值 最短匹配模式(
%'' case) or the longest matching pattern (the
%%'' case)已删除。如果参数是@或*,则 模式删除操作依次应用于每个位置参数,扩展是结果列表。如果参数是 一个用@或*下标的数组变量,模式删除操作依次应用于数组的每个成员,并且 扩展是结果列表。
- 最后以递归方式删除
还有一个更短的版本:
find . -type f -name "*.root" -size 1M -print0 | \
xargs -0 -n1 -I'{}' bash -c 'fpath={}; rm -r ${fpath%/*}'