清空每个子目录中的特定文件夹

清空每个子目录中的特定文件夹

在我的文件系统中输入数据时,某些文件进入了错误的目录,现在我必须重置具有特定名称的所有文件夹,而不触及该子目录的其他文件夹中的文件。由于我想清空所有目录同名我认为这是可能的,不幸的是我真的不知道该怎么做。

我有以下结构:

dir

   subdir1

       folder_I_want_to_empty   //all of these folders have the same name

           file_that_needs_to_be_deleted.txt

       folder_I_do_not_want_to_empty   

           file_that_has_to_remain.txt

   subdir2

       folder_I_want_to_empty   //all of these folders have the same name

           file_that_needs_to_be_deleted.txt

       folder_I_do_not_want_to_empty

           file_that_has_to_remain.txt 

   subdir3

       folder_I_want_to_empty   //all of these folders have the same name

           file_that_needs_to_be_deleted.txt

       folder_I_do_not_want_to_empty

           file_that_has_to_remain.txt

怎样才能清空文件夹_我想要_清空通过命令提示符在每个目录中,而无需删除文件夹或删除其中的任何数据文件夹_I_do_not_want_to_empty

答案1

您可以使用

rm -fr */folder_I_want_to_empty/* */folder_I_want_to_empty/.??*

请注意,该命令具有很强的破坏性,不会提示,而是毫不留情地非交互式删除。

如果您想查看要删除的内容,请替换rm -frls -ld

ls -ld */folder_I_want_to_empty/* */folder_I_want_to_empty/.??*

.小字:由于上面使用的模式,只有两个字符(第一个是点)的文件或文件夹被删除的可能性很小。如果这对您来说是个问题,请在评论中告诉我们,我将调整模式。

答案2

我可能会这样做。对于我的示例,我设置了目录 /test 用于测试。

find /test -type d -iname folder_I_want_to_empty -print0 | xargs -0 -I % find % -type f -print -delete

首先,我find将目录 ( -type d) 称为folder_I_want_to_empty.然后,对于每个文件,我让 xargs 对该目录中的文件运行查找,打印它们的名称,然后删除它们。这不会删除下面的子目录folder_I_want_to_empty,但可以这样做;在你的例子中没有。

下面是一个 dockerfile 示例,可供读者重现:

FROM debian
RUN mkdir -p /test
WORKDIR /test
RUN mkdir -p subdir1/folder_I_want_to_empty subdir2/folder_I_want_to_empty subdir1/folder_I_do_not_want_to_empty subdir2/folder_I_do_not_want_to_empty && \
    find /test -mindepth 2 -maxdepth 2 -type d -print0 | xargs -0 -I % touch %/test1 %/test2
ENTRYPOINT [ "/bin/sh" ]
CMD [ "-c" , "find /test -type d -iname folder_I_want_to_empty -print0 | xargs -0 -I % find % -type f -print -delete; find /test -type f" ]

相关内容