我试图编写一个bash脚本来查找文件夹中的所有.txt文件,获取基本名称,然后重新定位文件。但是,我有一个问题,即每当我尝试将文件名与字符串组合时,它会输出" * .txt"来自for循环的通配符,而不是它找到的实际文件。如果我只是回显变量,它会输出预期的文件名。
我在下面添加了一个简化的脚本及其生成的输出。我是BASH的新手,我认为这与处理变量的方式有关。我一直在寻找几个小时的解释,但我还没有想出任何东西。任何人都可以解释为什么连接时值会发生变化吗?
以下是示例代码:
TEMP_PATH=C/Test
for testFile in $TEMP_PATH/*.txt; do
testFileName=$(basename "$testFile")
echo $testFileName
echo "FileName:$testFileName"
done
以下是每个echo的示例输出
TestOne.txt
FileName:*.txt
以下是目录中的文件。 TestingToo.sh是上面显示的脚本
TestingToo.sh TestOne.txt
任何帮助将不胜感激!谢谢。
答案 0 :(得分:1)
试试这个
#!/usr/bin/env bash
TEMP_PATH=~/temp
TARGET_PATH=~/temp2
filenames=`find "$TEMP_PATH" -name "*.txt" `
if [ -z "$filenames" ] ; then echo "files not found" ; exit ; fi
for testFile in $filenames; do
testFileName=$(basename "$testFile")
echo $testFileName
mv "${testFile}" "${TARGET_PATH}/${testFileName}"
done