使用脚本从多个目录移动多个文件

使用脚本从多个目录移动多个文件

我想将许多文件(每个文件都在自己的目录中)移动到一个公共目录中。这些文件所在的每个目录都具有与文件相同的基本名称。我创建了一个文本填充,列出了所有这些基本名称。然后我制作了一个脚本文件,如下所示:

#!/bin/bash

for i in 'cat basenames.txt'
do
        cd $i
        mv ${i}.html /c/Users/USER/directory1
        cd ..

done

当我运行脚本时我得到:

move.sh: line 4: cd: too many arguments
mv: cannot stat 'cat': No such file or directory
mv: cannot stat 'all.txt.txt': No such file or directory

我哪里做错了?

答案1

'cat basenames.txt'带单引号的是字符串字面量,所以你的for循环将整个事情传递给cd

假设您想要评估命令cat basenames.txt并将结果一次传递给循环体:这需要反引号

for i in `cat basenames.txt`

或更现代和推荐的语法

for i in $(cat basenames.txt)

但是,循环命令的输出cat将受到分词和 shell 全局扩展的影响 - 所以我建议将循环重写为

while IFS= read -r i
do
        cd "$i"
        mv "${i}.html" "/c/Users/USER/directory1"
        cd ..

done < basenames.txt

相关内容