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 上的终端中使用的命令是./copier.sh myimage.jpeg prefixes.txt.

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

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

4

1 回答 1

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"

考虑适当地引用你的变量""

于 2013-09-11T08:12:49.010 回答