如何通过更改权限在 shell 脚本中将文件从一个文件夹移动到另一个文件夹

如何通过更改权限在 shell 脚本中将文件从一个文件夹移动到另一个文件夹

我想将文件从一个文件夹移动到另一个文件夹。

当文件的格式在 ( file _name.dat) 之间有空格并且当我使用该命令时mv file _name.dat /tmp ,文件不会移动。

但是当我使用mv "file _name.dat" /tmp时,文件正在移动。

帮助我编写一个脚本,该脚本有助于在自动移动时将file _name.dat其更改为。"file _name.dat"

答案1

你的问题很难理解。特别是,您需要复制粘贴您的代码复制粘贴错误消息

话虽这么说,你很有可能犯了一个典型的错误……


当 shell 脚本包含变量替换(类似$file$1)时,扩展的结果将被视为以空格分隔的通配符模式序列。该变量不被视为单个单词,而是被视为模式列表。所以如果你写

mv $1 /tmp      # <<<< BAD

然后运行myscript "file _name.dat"​​,然后该mv命令接收三个参数:file_name.dat/tmp。如果运行myscript "*.dat",则.dat当前目录中的所有文件都将被移动。

为了避免这种情况,请将变量替换放在双引号之间:mv "$1" /tmp。如果这样做,mv总是会收到两个参数:脚本的第一个参数和/tmp。需要将变量值视为通配符模式列表的情况极为罕见,因此请记住这个简单的规则:

始终在变量替换两边加上双引号: "$foo""$1"等。这也适用于命令替换:"$(mycommand)"

此外,如果文件名以破折号 ( -) 开头,mv则将其视为一个选项。为了避免这种情况,请传递--以标记选项的结尾:后面的任何内容--都是非选项参数(文件或目录名,对于mv)。大多数命令都会识别--以标记选项的结尾。

mv -- "$1" /tmp

myscript file _name.dat /tmp如果您想通过在 shell 中编写来调用脚本,这是不可能的。该脚本单独接收参数,它不知道您在命令行上键入了多少个空格。 (这与 Windows 不同,在 Windows 中,程序解析自己的参数。在 unix 上,程序接收参数列表。)如果从另一个 shell 脚本调用脚本,也请在调用脚本中使用正确的引用。

相关内容