如何使用 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
..可以是移动三个文件的有效命令。
为了防止解释器查找单个文件(以空格分隔),当您用空格包围变量时,您可以告诉它采用完整的文件名(包括空格)。
好问题!