Linux 中的 Shell 脚本

Linux 中的 Shell 脚本

如何使用 bash 脚本将包含空格的几个文件移动到另一个目录?

文件名:“Sublime Text 3.x”

我的代码是:

for file in $(ls -t | tail -n +1)
do 
mv $file /tmp/test
done

输出显示为:

mv: cannot stat ‘Sublime’: No such file or directory
mv: cannot stat ‘Text’: No such file or directory
mv: cannot stat ‘3.x’: No such file or directory

答案1

您可以通过以下方式实现此目的

ls -t | grep ' ' | while read file; do mv "$file" /tmp/test; done

希望这会有所帮助,如果您有任何疑问,可以询问!

答案2

在 ls 和 move 命令中使用字符串时,需要用引号引起来:

for file in "$(ls -t | tail -n +1)"
do
  mv "$file" /tmp/test
done

尝试一下。

更长的解释:

仔细查看示例的输出,您会发现解释器尝试了三次:

首先它尝试移动文件“Sublime”

然后它尝试移动文件“文本”

最后尝试移动文件“3.x”

您可能会注意到,它们之间有一个空格。您可以使用该命令一次移动三个文件mv,但前提是这些文件存在。

所以:

mv file1.txt file2.txt file3.txt /some/destination/dir

..可以是移动三个文件的有效命令。

为了防止解释器查找单个文件(以空格分隔),当您用空格包围变量时,您可以告诉它采用完整的文件名(包括空格)。

好问题!

相关内容