2013-09-11 3 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, - ./copier.sh myimage.jpeg prefixes.txt.

У меня есть сценарий для создания каталога, если я просто использую что-то вроде 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" 

Рассмотрим процитировать ваши переменные правильно вокруг "", а также.

Смежные вопросы