2015-03-11 4 views
2

У меня есть список имен образцов в текстовом формате, например.Копирование файлов из текстового списка

Sample1 
Sample2 
etc.... 

Im пытается найти и скопировать файлы с этими именами и определенным расширением, используя ниже одного лайнера

find ./ | egrep fq.gz | fgrep -f list.txt | perl -ne 'chomp; system "cp $_ /data/copy_of_files/"' 

Никаких ошибок не вырвали, но ничего не копируются.

Эта линия работает, пока я не передавать вывод на Perl (список правильных файлов отпечатков в termial от fgrep), так что я думаю, что моя проблема с разделом PERL ...

какие-либо предложения?

+0

Чтобы уточнить, вы хотите искать файлы с определенным расширением (в данном случае .gz), а затем проверить, соответствует ли содержимое этих файлов одной из строк в list.txt, а затем скопировать их все в какой-либо каталог? –

+0

Нет, если имя файла содержит одну из строк текста. – user3234810

ответ

1

И ваша исходная команда и эта команда работает для меня:

find . -name '*.gz' | fgrep -f list.txt | \ 
    perl -ne 'chomp; system("cp $_ <DIR>");' 

Подтвердили ли вы, что ваш пользователь или группа имеют права на запись в /data/copy_of_files?

1

Предложения:

  1. Не использовать Perl здесь, но вместо этого, создать конвейер, который просто плюет из самых cp команд. Как только вы удовлетворитесь тем, что вы видите , добавьте | sh -x.
  2. Будьте абсолютно уверены, что ни одно из ваших имен файлов не содержит пробелов или других символов, специальных для оболочки. Если некоторые из них выполняются, но только немного (например, только пробелы), вы можете получить соответствующие цитаты в командах cp, но если что-то возможно в именах файлов, потребуется другой подход, и я, вероятно, напишу все это в Perl с использованием File::Find::Rule.
Смежные вопросы