我想知道你是否能帮我修复bash脚本,该脚本应该可以显示目录中所有隐藏文件。 问题出在哪里?
param='.'
for file in $param*; do
mv $file $(echo $file | sed 's/^.\(.*\)/\1/')
done
exit
我想知道你是否能帮我修复bash脚本,该脚本应该可以显示目录中所有隐藏文件。 问题出在哪里?
param='.'
for file in $param*; do
mv $file $(echo $file | sed 's/^.\(.*\)/\1/')
done
exit
for循环
应该可以正常工作:export GLOBIGNORE=".:.."
for file in .*; do
mv -n "$file" "${file#.}"
# mv -n "$file" "${file:1}"
done
提示:在进行大量的文件移动/重命名操作前最好备份您的文件。
@anubhava的答案可行,但这里有一个修订过的、通用的解决方案来处理隐藏的文件/文件夹:
既不依赖于也不更改全局状态(配置)。
( # 在子shell中执行以本地化以下配置更改。
GLOBIGNORE=".:.." # 不匹配“.”和“..”。
shopt -s nullglob # 如果没有匹配项,则将扩展globbing模式为空字符串。
for f in .*; do # 枚举所有隐藏文件/文件夹(如果有)。
# 在此处处理“$f”;例如:mv -n“$f”“${f:1}”
done
)
for f in .*; do
if [[ $f != '.' && $f != '..' && -e $f ]]; then
# Process "$f" here; e.g.: mv -n "$f" "${f:1}"
fi
done
我不会像那样批量重命名它们,我会为它们添加可见的符号链接:
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
测试这类危险游戏最好的方法是在您的机器上创建一个额外的账户...如果您搞砸了自己的账户,将会有"无限的眼泪™"
如果您想先进行测试(这是非常明智的做法):
ls -1A |grep "^\." |while read F; do echo "mv $F ${F:1}"; done
.
和..
吗? - damienfrancoismv "$file" "${file:1}"
。 - damienfrancoisbash
中花括号语法的含义是什么? - Jonathan Lefflerexport GLOBIGNORE=".:.."
,然后使用.*
将会跳过这些内容。 - mpontillotest -e "${file#.}"
来进行测试。;-) - mpontillo