创建文件时创建目录

时间:2013-09-11 01:34:19

标签: macos bash unix terminal

我是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的东西,我已经得到了创建目录的脚本但是这样做没有任何好处,因为我每次运行时都必须进入并更改目录名称脚本。

如果您有任何疑问,请与我们联系。如果我犯了一些重大错误,我很抱歉,我很难找到解决方案。谢谢你的帮助!

1 个答案:

答案 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"

考虑在""周围正确引用变量。