UNIX:如何将多个子目录中的所有隐藏文件更改为可见

UNIX:如何将多个子目录中的所有隐藏文件更改为可见

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

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

答案1

使用 GNU find

find /some/path -type f -name '.*' -execdir sh -c 'mv -i "$0" "./${0#./.}"' {} \;

使用 Perl rename

find /some/path -type f -name '.*' -exec prename -i -n 's!.*/\K\.!!' {} +

-n(当您对结果满意时删除)。

答案2

这是解决所有问题的行终于找到了答案

find -mindepth 1 -depth -exec rename -n 's{/\.([^\/]*$)}{/$1}' {} +

答案3

只需与一个简单的 shell 脚本一起使用find即可进行重命名并检查现有文件是否被覆盖:

find . -type f -name '.*' \
    -execdir sh -c '[ ! -e "${1#.}" ] && mv "$1" "${1#.}"' sh {} ';'

-execdir选项将在找到的名称的父目录中执行其参数,并且{}将是找到的名称的基本名称(不带路径的名称)。该选项是对标准的广泛实施的扩展find

sh -c脚本将简单地确保所需的名称尚未被占用,然后它将重命名该文件。

参数替换将采用(脚本的第一个命令行参数,即文件名)${1#.}的值并删除初始点。$1sh -c

答案4

find . -type f -name .\* -exec rename -n 's/\.//;' {} +

相关内容