2013-09-11 189 views
0

我是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的终端中使用的命令是​​。

我已经得到了脚本来创建一个目录,如果我只是使用类似mkdir test的东西,但这样做不会有任何好处,因为每次运行脚本时都必须进入并更改目录名称。

让我知道如果您有任何问题。如果我犯了一些重大错误,我很抱歉,我只是无法找到解决方案。谢谢你的帮助!

回答

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" 

请考虑在""附近正确引用您的变量。