使用sed和mv命令取消隐藏unix中的隐藏文件

时间:2013-11-18 22:14:15

标签: bash unix sed mv hidden-files

我想知道你是否可以帮我修复bash脚本,它应该取消隐藏目录中的所有hiden文件。 问题出在哪儿?

param='.'
for file in $param*; do
mv $file $(echo $file | sed 's/^.\(.*\)/\1/')
done
exit

4 个答案:

答案 0 :(得分:7)

for loop应该有效:

export GLOBIGNORE=".:.."
for file in .*; do
   mv -n "$file" "${file#.}"
   # mv -n "$file" "${file:1}"
done

PS :在进行群发mv /重命名之前更好地备份文件

答案 1 :(得分:1)

@ anubhava的答案有效,但这是一个修正的,用于处理隐藏文件/文件夹的通用解决方案,其中:

  • 正确处理边缘情况(没有隐藏文件/文件夹)。
  • 既不依赖也不改变全局状态(配置)。

    ( # Execute in subshell to localize configuration changes below.
    GLOBIGNORE=".:.."   # Do not match '.' and '..'.
    shopt -s nullglob   # Expand globbing pattern to empty string, if no matches.
    for f in .*; do     # Enumerate all hidden files/folders, if any.
      # Process "$f" here; e.g.: mv -n "$f" "${f:1}"
    done
    )
    

如果您想避免子shell ,您可以使用以下方法,明确排除...以及未扩展模式以防万一匹配(如果GLOBIGNORE恰好包含.:..):

    for f in .*; do
     if [[ $f != '.' && $f != '..'  && -e $f ]]; then
        # Process "$f" here; e.g.: mv -n "$f" "${f:1}"
     fi
    done

给@jthill,@ ananhava,@ Mike的帽子提示。

答案 2 :(得分:0)

我不会像我那样大规模重命名它们,我会为它们添加可见的符号链接:

while read f; do
        ln -s "$f" "visible-${f#./}"
done <<EOD
$(find -mindepth 1 -maxdepth 1 -name '.*')
EOD

答案 3 :(得分:0)

这只会取消隐藏所有隐藏文件,远离您的主目录!!!

ls -1Ap |grep "^\." |grep -v "/" |while read F; do mv $F ${F:1}; done

这将取消隐藏所有隐藏文件和dirs:再远离您的主目录!!!

ls -1A |grep "^\." |while read F; do mv $F ${F:1}; done

测试这类危险游戏的最佳方法就是让自己在自己的机器上成为一个额外的帐户...如果你搞砸了自己的帐户,就会有“无限量撕裂(tm)”

如果你想先测试它(这是一件非常明智的事情):

ls -1A |grep "^\." |while read F; do echo "mv $F ${F:1}"; done