gpt4 book ai didi

linux - 如何将所有隐藏文件夹/文件更改为在多个子目录中可见

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:55 25 4
gpt4 key购买 nike

我在一个目录中有数百个子目录,其中都有隐藏文件,我需要删除它们开头的句点以使它们可见。我找到了一个进入每个目录并更改它们以使它们可见的命令,但我需要知道如何使该命令从一个目录向上运行。

rename 's/\.//;' .*

我已经尝试了大约一个小时来修改它以提高一个级别,但我对 Perl 字符串的理解还不足以做到这一点。如果有人可以提供帮助,我相信这很简单,但我无法找到正确的答案。

最佳答案

这需要一个支持+的find(可以用\;代替,它会多次调用rename),但即使是POSIX find指定它:

find -mindepth 1 -depth -exec rename -n 's{/\.([^\/]*$)}{/$1}' {} +
  • -depth 选项可防止在重命名目录中的所有文件之前重命名目录
  • -mindepth 1 防止 find 尝试重命名当前目录,..
  • -n 只是打印要重命名的内容,而不是实际重命名(必须删除才能重命名)。
  • 如果前面有正斜杠,正则表达式会删除最后一个没有正斜杠的句点。

rename 不会覆盖现有文件,除非使用 -f(“force”)选项。

对于这样的测试目录结构:

.
├── .dir1
│   ├── .dir2
│   │   ├── .dir3
│   │   │   └── .file2
│   │   └── .file1
│   ├── file3
│   └── .file6
├── dir5
│   └── .file5
├── .file4
├── test1.bar
└── test1.foo

输出是

rename(./dir5/.file5, ./dir5/file5)
rename(./.file4, ./file4)
rename(./.dir1/.file6, ./.dir1/file6)
rename(./.dir1/.dir2/.file1, ./.dir1/.dir2/file1)
rename(./.dir1/.dir2/.dir3/.file2, ./.dir1/.dir2/.dir3/file2)
rename(./.dir1/.dir2/.dir3, ./.dir1/.dir2/dir3)
rename(./.dir1/.dir2, ./.dir1/dir2)
rename(./.dir1, ./dir1)

去掉-n后的结果是

.
├── dir1
│   ├── dir2
│   │   ├── dir3
│   │   │   └── file2
│   │   └── file1
│   ├── file3
│   └── file6
├── dir5
│   └── file5
├── file4
├── test1.bar
└── test1.foo

关于linux - 如何将所有隐藏文件夹/文件更改为在多个子目录中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517022/

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