2

我有一个目录,其中包含以数字命名的子目录(例如 1, 2, 3, 32000, 43546 )。我需要删除超过一定数量的所有目录。例如,我需要删除名称数字大于 14234 的所有子目录。这可以通过单个命令行操作来完成吗?

rm -r /directory/subdirectories_over_14234 ( how can I do this? )
4

3 回答 3

4

在 bash 中,我会写

for dir in *; do [[ -d $dir ]] && (( dir > 14234 )) && echo rm -r $dir; done

自行决定删除echo

于 2012-02-16T21:52:15.850 回答
2

好吧,您可以执行 bash for 循环指令,以便遍历目录文件名并在提取文件名的目标编号后使用test命令。

应该是这样的:

for $file in /your/path 
do
   #extract number here with any text processing command (ed ?)
   if test [$name -leq your_value]
   then
      rm -R $file
   fi
done
于 2012-02-16T21:32:00.153 回答
1

您没有提及您正在使用哪个外壳。我正在使用Zsh,它有一个非常酷的功能:它可以根据需要根据数字选择文件!所以你可以做

$ rm -r /directory/<14234->(/)

选择/directory数值超过 14234 的所有子目录。

一般来说,你使用

<a-b>

选择数值介于a和之间的路径b。您附加 a(/)以仅匹配目录。用于(.)仅匹配文件。Zsh 中的glob 模式非常强大,可以大部分(如果不是总是)替换旧的好find命令。

于 2012-02-16T21:39:36.250 回答