我是Unix的新手,我正在学习在自动化文件复制等方面运行脚本有多强大。我已经帮助创建了初始脚本(信用额到期的信用:https://apple.stackexchange.com/questions/101436/automate-duplicating-and-renaming-images/101437 )但现在我想知道如何在复制文件时生成特定的目录名称。这是原始剧本:
#!/bin/bash
file=$1
prefixes=$2
filename=`basename "$file"`
while read line
do
cp $file "$line-$filename"
done < $prefixes
我基本上调用脚本,然后从同一目录中的文本文件中获取前缀,将字符串附加到新文件的开头。我想要做的是创建一个包含原始文件名的目录,这样我就可以将所有重复项自动放入新文件夹中。我尝试过这样的事情:
#!/bin/bash
file=$1
prefixes=$2
filename=`basename "$file"`
while read line
do
mkdir $filename
cp $file "$filename/$line-$filename"
done < $prefixes
但这似乎不起作用。你会看到我的意图。我想要一个与原始文件同名的目录,然后将所有新图像复制到该目录中。我在Mac OSX上的终端中使用的命令是./copier.sh myimage.jpeg prefixes.txt
。
如果我只是使用类似mkdir test
的东西,我已经得到了创建目录的脚本但是这样做没有任何好处,因为我每次运行时都必须进入并更改目录名称脚本。
如果您有任何疑问,请与我们联系。如果我犯了一些重大错误,我很抱歉,我很难找到解决方案。谢谢你的帮助!
答案 0 :(得分:1)
如果$filename
位于同一目录中,则由于文件已存在,因此无法创建目录。您可以考虑使用不同的名称,例如没有扩展名的文件名。
#!/bin/bash
file=$1
prefixes=$2
filename=${file##*/} ## Better than using an external binary like basename.
dir=${filename%%.*} ## Remove extension.
mkdir -p "$dir" || exit 1 ## Only need to create it once so place it outside the loop. And `$dir` might already have been made so use `-p`. This would also make the code exit if `mkdir` fails.
while read -r line ## Use -r to read lines in raw form
do
cp "$file" "$dir/$line-$filename"
done < "$prefixes"
考虑在""
周围正确引用变量。