我试图使用Automator来设置一个文件夹的动作,所以当一个。txt文件被放入该文件夹时,bash脚本使用' run Shell script '运行,我希望它通过文件夹循环并改变里面的文件的名称。
我的设置是。Shell:/bin/zsh和Pass input:作为参数,下面是我的代码。
for f in "@$"
do
mv $f Newfilename.txt
done
我假定文件夹的路径作为参数传递到脚本中,并存储在$@变量中?路径看起来像这样'/Users/myname/Desktop/bash_test'
当我将。txt文件放入文件夹时,它会改变文件的名称,但随后将其移动到我的Users文件夹中,我希望文件保留在上面详细说明的路径指定的文件夹中。
谁能解释一下为什么新命名的文件移动到我的用户文件夹?
和
如何修改这个bash脚本,使新命名的文件保留在文件被放入的文件夹中?
我使用的是Monterey 12.2.1和bash 3.2.57
感谢mv
移动和/或重命名文件;由于您没有指定要将文件放入哪个目录(只是要给它取什么名字),因此它假定您的意思是将文件放入脚本的工作目录中(如果您没有指定特定的目录,这几乎是默认的)。这只是碰巧Automator使用你的主文件夹作为它的工作目录,并且它启动的shell继承它。
因此,您需要指定将文件放入…与开始的目录相同:
mv -n $f $(dirname $f)/Newfilename.txt
(dirname
是一个标准命令,用于从路径中提取包含的目录——在本例中是$f
,它是文件的路径。)
顺便说一句,请注意我将-n
添加到mv
命令中。这是为了防止它覆盖任何已经存在的同名文件。默认情况下,mv
假定如果存在名称冲突,它应该删除原始文件并用您告诉它要移动的文件替换它。这有可能导致数据丢失和遗憾。如果存在冲突,mv -n
将不会移动/重命名文件,这更安全。如果你想让它做其他事情(比如添加"(2)";对于文件名),您必须编写额外的脚本来实现这一点。