如何以正确的顺序删除目录以便删除空目录?

如何以正确的顺序删除目录以便删除空目录?

我有一个文件中按某种顺序排列的文件和目录列表,我想编写一个删除它们的脚本。

目录是仅有的如果他们的所有后代也将被删除,则应该被删除。
(换句话说,只有在脚本运行多次后它们为空时才应将其删除。)

我真的更喜欢一次性完成此操作。
但在 1 遍中执行此操作似乎需要以正确的顺序执行操作(后序遍历)。

我认为这是一个已知问题...人们通常如何在 shell 脚本中解决它?

答案1

我认为这是一个已知问题...人们通常如何在 shell 脚本中解决它?

他们将文件和目录列表传递给sort -r.

如果您从 获取文件和目录列表find,您还可以使用该-depth选项来确保后序遍历。

答案2

您可以尝试按文件中斜杠的数量(降序)对文件进行排序,这样您应该可以解决排序问题。

答案3

没关系,我独立解决了。

可以用 来完成awk。请注意,该解决方案确实不是允许文件名中出现换行符。

awk -- '{a=$$0;b=$$0;print(gsub("/","/",a)-sub(/\/$$/,"aaa",b),$$0)}' INPUT_FILE.txt \
    |  "$(call Q2,/usr/bin/sort)" -k1,1nr \
    |  cut -d " " -f 2-

当我在这里时,可以通过以下方式删除重复的行:

awk -- '{pos[$$0] = NR} END { for(key in pos) reverse[pos[key]] = key; for(nr=1;nr<=NR;nr++) if(nr in reverse) print reverse[nr] }' INPUT_FILE.txt

请注意,重复数据删除是批判的如果最终递归的话,可以防止指数时间爆炸。

相关内容