gpt4 book ai didi

linux - 从文件名 bash 脚本中去除前导点

转载 作者:IT王子 更新时间:2023-10-28 23:56:11 26 4
gpt4 key购买 nike

我在一堆目录中有一些文件,这些文件有一个前导点,因此被隐藏了。我想还原它并去掉前导点。

我在以下方面没有成功:

for file in `find files/ -type f`;
do
base=`basename $file`
if [ `$base | cut -c1-2` = "." ];
then newname=`$base | cut -c2-`;
dirs=`dirname $file`;
echo $dirs/$newname;
fi
done

条件语句失败:

[: =: unary operator expected

此外,一些文件中有一个空格,文件将它们拆分返回。

如有任何帮助,我们将不胜感激。

最佳答案

从变量开头删除内容的最简单方法是使用 ${var#pattern}

$ FILENAME=.bashrc;    echo "${FILENAME#.}"
bashrc
$ FILENAME=/etc/fstab; echo "${FILENAME#.}"
/etc/fstab

请参阅 bash 手册页:

${parameter#word}
${parameter##word}

The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ‘‘#’’ case) or the longest matching pattern (the ‘‘##’’ case) deleted.

顺便说一句,使用更具选择性的 find 命令,您无需完成所有艰苦的工作。您可以让 find 只匹配带有前导点的文件:

find files/ -type f -name '.*'

把它们放在一起,然后:

find files/ -type f -name '.*' -printf '%P\0' |
while read -d $'\0' path; do
dir=$(dirname "$path")
file=$(basename "$path")
mv "$dir/$file" "$dir/${file#.}"
done

补充说明:

  1. 要正确处理带空格的文件名,您需要在引用变量名时用引号引起来。写“$file”而不只是 $file

  2. 为了额外的健壮性,-printf '\0'read -d $'\0' 使用 NUL 字符作为分隔符,因此即使是嵌入了文件名换行符 '\n' 将起作用。

关于linux - 从文件名 bash 脚本中去除前导点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4763041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com