在我的文件系统中输入数据时,某些文件进入了错误的目录,现在我必须重置具有特定名称的所有文件夹,而不触及该子目录的其他文件夹中的文件。由于我想清空所有目录同名我认为这是可能的,不幸的是我真的不知道该怎么做。
我有以下结构:
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 -fr
为ls -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" ]