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



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

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

这个for loop应该工作:

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

PS:最好在进行大规模mv/rename-

之前备份文件

@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、@anubhava、@Mike致敬。

我自己不会大规模重命名它们,我会添加可见的符号链接到它们:

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

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

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

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

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

最新更新