我需要*.*
在存储在变量中的路径末尾使用。另外,只要一个“*”也应该可以。
最后我想移动同名文件夹中的文件。使用像/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
您的脚本中有几个绊脚石 - 其中一些会立即浮现在您的脑海中:
在您的脚本行中: "for file in $a; do" $a 中的 *s 不会按您的预期由 shell 解释,而是按字面意思理解。
您的 *.* 和 * 不相等:*.* 需要在文件名中加点,而 * 则不需要。
检查像这样的简化脚本:
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