gpt4 book ai didi

linux - 自定义删除文件夹中的文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:23 25 4
gpt4 key购买 nike

我有一个可以放置不同文件的文件夹。我想检查它是否包含 .gitkeep 之外的其他文件并删除它们,同时保留 .gitkeep 。我怎样才能做到这一点 ? (对于 bash 我是个新手)

最佳答案

一如既往,有多种方法可以做到这一点,我只是分享我对 Linux 的了解:

1)find <path-to-the-folder> -maxdepth 1 -type f ! -iname '\.gitkeep' -delete

maxdepth 为 1 指定仅搜索当前目录。如果删除 maxdepth,它将递归地查找路径下所有目录中除 '.gitkeep' 之外的所有文件。您可以将最大深度增加到您想要从路径进入目录的深度。

'-type f' 指定我们只是查找文件。如果您还想查找目录(或链接、其他类型),那么您可以省略此选项。

-iname '.gitkeep' 为 '.gitkeep' 指定不区分大小写的数学,'\' 用于转义 '.',因为在 bash 中,'.'是一个正则表达式。您可以将其保留为 -name 而不是 -iname 以进行区分大小写的匹配。

“!” -iname 之前,是进行逆匹配,即查找所有不包含 '.gitkeep' 名称的文件,如果删除 '!',那么您将得到所有匹配 '.gitkeep' 的文件。

最后,“-delete”将删除符合此规范的文件。

如果您想在执行 -delete 之前查看所有文件将被删除,您可以删除该标志,它将显示所有文件:

find <path-to-the-folder> -maxdepth 1 -type f ! -iname '\.gitkeep'

(你也可以在最后使用 -print ,这只是多余的)

2) for i in `ls -a | grep -v '\.gitkeep'` ; do rm -rf $i ; done

不建议这样做,因为 rm -rf 总是一个坏主意(IMO)。您可以将其更改为 rm -f (以确保它仅适用于文件而不是目录)。

为了安全起见,建议首先对文件列表进行回显,看看您是否准备好删除显示的所有文件:

for i in `ls -a | grep -v '\.gitkeep'` ; do echo $i ; done

这将遍历所有与“.gitkeep”不匹配的文件并将它们一一删除......这不是我认为删除文件的最佳方式

3)rm -rf $(ls -a  | grep -v '\.gitkeep')

再次,小心使用 rm -rf,而不是上面的 rm -rf,您可以再次执行 echo 来找出将被删除的文件

我确信还有更多方法,但这只是一系列可能性的一瞥:)

祝你好运

Ember

====================================================================

编辑:

=> 当您尝试学习新东西时,手册页是您的 friend ,如果您不了解命令的工作原理或它可以采取哪些选项并执行哪些操作,请始终查找 man 以获取详细信息。

例如:人找到

=> 我知道你正在尝试在自己的舒适区之外学习一些东西,这总是值得称赞的,但是堆栈溢出不喜欢人们在没有研究的情况下提出问题。

如果您进行了研究,您应该在问题中提及,让人们知道您为自己找到答案所做的事情。

简单的谷歌搜索或深入研究堆栈溢出问题将为您的问题提供类似甚至更好的答案。所以要小心:)

凡事预则立:)

关于linux - 自定义删除文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com