LINUX.ORG.RU

Re: Копирование по списку. Как?

Что-то типа такого:

cat <list> | while read file_name; do echo "$file_name" <dir>; done

или

cat <list> | xargs -d "\n" cp --target-directory=<dir>

<list> - список файлов
<dir> - директория в которую нужно скопировать.

slackophile ()

Re: Копирование по списку. Как?

cpio -p /directory < file.list

Nao ★★★★★ ()
Ответ на: Re: Копирование по списку. Как? от slackophile

Re: Копирование по списку. Как?

результат:

cat /home/leo/Desktop/installed_programs.txt | while read file_name; do echo "$file_name" /media/hdb1/repo_copy_without_dir; done

zlib1g-dev.....install /media/hdb1/repo_copy_without_dir

cat /home/leo/Desktop/installed_programs.txt | xargs -d "\n" cp --target-directory=/media/hdb1/repo_copy_without_dir

cp: невозможно выполнить stat для `zlib1g-dev\t\t\t\t\tinstall': No such file or directory

leonm ()
Ответ на: Re: Копирование по списку. Как? от xsl

Re: Копирование по списку. Как?

xargs -i cp {} dir < file.list

это если имена файлов не содержат пробелов. если же содержат, то в любом случае нужно чтобы было по одному файлу на строку либо использовать в качестве разделителя не пробел.

Nao ★★★★★ ()
Ответ на: Re: Копирование по списку. Как? от leonm

Re: Копирование по списку. Как?

Обе команды были расчитаны на то, что файл содержит по одному имени файла на строку, например:

file name 1.txt
file name 2.mp3
...
file name N.XXX

Если формат твоего списка отличается то его нужно либо привести к такому виду, как вверху, либо изменить сами команды.

Вообщем:
man awk
и не забывай про относительные пути.

PS: Обе команды пробелы в файлах должны воспринимать нормально (покрайней мере у меня воспринемают нормально).

slackophile ()
Ответ на: Re: Копирование по списку. Как? от slackophile

Re: Копирование по списку. Как?

> cat <list> | while read file_name; do echo "$file_name" <dir>; done

Ой, вместо echo должно быть cp. Тоесть так:

cat <list> | while read file_name; do cp "$file_name" <dir>; done

slackophile ()
Ответ на: Re: Копирование по списку. Как? от slackophile

Re: Копирование по списку. Как?

Друзья, попробовал все приведенные команды с разными вариантами списка, - результат = 0, как приводил выше. Делал список только из одного файла без пробелов. Думаю список не виноват. Команды давал от имени sudo из директории /media/hdb1/repo, где лежат в папках те самые пакеты. Соответственно указывал на список так /media/hdb1/repo/list.txt. Пробовал делать список без расширения .txt. Ошибка наверняка пустячная, вот только где? Пробовал читать ман - слишком сложно.

leonm ()
Ответ на: Re: Копирование по списку. Как? от leonm

Re: Копирование по списку. Как?

> Ошибка наверняка пустячная, вот только где?

Если результат как выше, то в твоем "списке".

Вообще сделай на всякий cd /media/hdb1/repo && sudo cp `cat list.txt` /to/dir и скажи какую ошибку выдает.

> где лежат в папках те самые пакеты

не совсем понял, т.е. каждый пакет лежит в /media/hdb1/repo/somefolder/ ?

Ну покажи несколько строчек (не забудь выбрать при постинге Preformatted text) или лучше выложи его целиком куда-нибудь.

xsl ()
Ответ на: Re: Копирование по списку. Как? от xsl

Re: Копирование по списку. Как?

Вот результат только с другими путями (дома):

code:
root@leo-laptop:/media/sda2/repo# cp `cat list.txt` /home/leo/repo
cp: невозможно выполнить stat для `libsvn-doc': No such file or directory
cp: невозможно выполнить stat для `language-pack-gnome-mn-base': No such file or directory
cp: невозможно выполнить stat для `libchewing3-dev': No such file or directory

вот содержимое /media/sda2/repo/list.txt

libsvn-doc
language-pack-gnome-mn-base
libchewing3-dev

а вот так лежат файлы по папкам:

/media/sda2/repo/pool/main/a/aalib
/media/sda2/repo/pool/multiverse/b/babytrans
/media/sda2/repo/pool/restricted/l/linux-meta

leonm ()
Ответ на: Re: Копирование по списку. Как? от leonm

Re: Копирование по списку. Как?

Пробовал также такой формат list.txt:

abiword_2.4.6-1.1ubuntu2_i386.deb
babytrans_0.9.1-0.3ubuntu2_i386.deb
linux_2.6.20.15.14_i386.deb

результат такой же.

leonm ()
Ответ на: Re: Копирование по списку. Как? от leonm

Re: Копирование по списку. Как?

Конечно же файлы в списке должны бы быть с относительными путями до них, т.к. все вышеуказанные команды искали их в текущей директории, но вот на вскидку обход этой проблемы (выполняться будет долго из-за поиска каждого файла):

for i in `cat list.txt`; do find . -name "${i}" -exec cp '{}' /TO/DIR/ \;; done

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

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

Так как DVD четыре, можно после done припаять ;eject, чтобы дисковод выезжал после того, как всё файло с данного DVD скопируется.

xsl ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.