我的目录中有数百个子目录,其中都包含隐藏文件,我需要删除它们开头的句点以使它们可见。我找到了一个命令来进入每个目录并更改它们以使它们可见,但我需要知道如何使该命令从一个目录开始工作。
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#.}
的值并删除初始点。$1
sh -c
答案4
find . -type f -name .\* -exec rename -n 's/\.//;' {} +