2014-12-01 1 views
0

Я хочу, чтобы мой скрипт копировал файлы в address.list (который содержит абсолютный путь к этим файлам) в моей папке3, добавляя имя файла переменная k (имя нижних папок, из которой они пришли).использовать cp для копирования и изменения имени файла, считанного из файла. File

Сценарий имеет смысл для меня, но он не работает, в нем говорится: «cp: невозможно создать обычный файл»; какие-либо предложения?

#!/bin/bash 
cd /folder1/ 

for k in $(cat lowerfolders_list); do 
    for f in $(cat addresses.lst); do 
     cp $f "/folder1/folder2/folder3/${k}_$f" 
     cd /folder1/ 
    done 
done 

Точная ошибка, я получаю это "ф: не может создать обычный файл`/A/B/C/D/E/Folder1/folder2/folder3/имя моего $ к/path_to_my_file/myfile.sdf «: нет такого файла или каталога"

EDIT

было бы хорошо, даже если бы я мог скопировать эти файлы называя их только после $ к, но когда я пытался сделать это мой вывод последнего файла в моих адресах.lst несколько раз с каждым именем в моем нижнем регистре. Это сценарий, я использовал:

#!/bin/bash 
cd /folder1/ 

for k in $(cat lowerfolders_list); do 
    for f in $(cat addresses.lst); do 
     cp "$f" "/folder1/folder2/folder3/${k}" 
    done 
    cd - 
done 

Любые предложения?

EDIT Решенный

#!/bin/bash 
cd /folder1/ 

for k in $(cat lowerfolders_list); do 
    for f in $(cat addresses.lst); do 
    myfile=$(basename "$f") 
    cp "$f" "/folder1/folder2/folder3/${k}_${myfile}" 
    done 
    cd - 
done 

Спасибо всем людям, которые внесли свой вклад.

+1

ли разрешение на создание на пользователя файлы в этом каталоге? Также почему вы используете 'cd' в цикле? 'cp' не меняет каталогов. –

+0

У меня есть разрешение сделать это, cd в конце скрипта работал для меня один раз в подобном скрипте, поэтому я сохранил его в этом, но в любом случае не должен плохо влиять на скрипт ... я полагаю. – alikino

+0

Использует ли 'touch"/folder1/folder2/folder3/$ {k} _ $ f "' в этом цикле вместо 'cp' правильно работать? –

ответ

1

Извините, но соблюдение команд, которые работали с другой целью, не понимая, что они делают, всегда будет беспокоить вас. В маркетинге это может показаться работающим, но в области информатики, делая что-то, что вы не понимаете, ломается очень быстро. Просто прекратите эту практику раньше. Попытайтесь сначала понять, что такое структура каталогов. Прочтите man cd и man cp и man mkdir.

Так что команда cd завинчивает ваш скрипт, потому что он меняет каталог, а список файлов и каталогов, которые вы считаете, изначально становится недопустимыми. Но, может быть, у меня есть идея, что вы пытались сделать.

Во-вторых, небезопасно читать список таких файлов и файлов. Если у них есть пробелы в названии, это сломается плохо. Но давайте оставим это на время.

Тогда вы не создаете структуру каталогов "/ folder1/folder2/folder3". Если этого не существует, прежде чем запускать ваш скрипт, он также сломается. Используйте mkdir -p.

Так что моя догадка за то, что вы пытаетесь сделать, будет что-то вроде этого:

for k in $(cat lowerfolders_list); do 
    cd "${k}" 
    for f in $(cat addresses.lst); do 
     cp "$f" "/folder1/folder2/folder3/${k}_$f" 
    done 
    cd - 
done 
+0

Все еще не работает, никакая папка не содержит пробелов в имени, и у меня уже есть папка назначения. Ошибка, которую я получаю, - это cp: невозможно создать обычный файл '/ A/B/C/D/E/folder1/folder2/folder3/name моего $ k/path_to_my_file/myfile.sdf ': нет такого файла или каталога – alikino

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