将星号添加到路径变量?

将星号添加到路径变量?

我需要*.*在存储在变量中的路径末尾使用。另外,只要一个“*”也应该可以。

最后我想移动同名文件夹中的文件。使用像/share/test/temp/*for 循环这样的静态路径可以工作。现在我有不同的用户名和 for 循环的搜索文件夹发生了变化。因此我需要一个变量。这不起作用:

    destDir= $Startdir/$username/
a=$destDir/*.*

for file in $a  ; do
  tmp=${file:0:4};
  filenew=${file%.*}"($tmp)";
  mkdir -- "$filenew";
  mv -- "$file" "$filenew";
done

我尝试过逃避,单引号和双引号以及反引号。

a=$destDir/*.*      # not working
a="$destDir/\*"     # not working
a= $destDir'/\*'    # not working
a="$destDir/'\*.\*" # not working

我怎样才能制作一个带有星号的纯刺,它将在 for 循环中被替换?或者是否有其他选项可以将变量传递给存储路径的 for 循环,并且 for 知道他必须搜索该路径中的每个文件?

我更喜欢 for 循环find $destDir -name ..

答案1

您的脚本中有几个绊脚石 - 其中一些会立即浮现在您的脑海中:

  1. 在您的脚本行中: "for file in $a; do" $a 中的 *s 不会按您的预期由 shell 解释,而是按字面意思理解。

  2. 您的 *.* 和 * 不相等:*.* 需要在文件名中加点,而 * 则不需要。

检查像这样的简化脚本:

destDir=$HOME
a=$destDir/*
for file in $a;  do echo $file;  done

警告:如果文件名包含空格,for 循环会将其拆分为两个(或更多)文件名。

如果 /share/test/temp/* 适合您(这意味着您的文件名中没有空格),为什么不直接使用:

for file in $destdir/*;  do ...yourstuff...; done

如果你有空格,你可以尝试:

find $destDir -type f | while read file;  do ...yourstuff...;  done

相关内容