Вопрос помечен тегами sed и grep , поэтому я предполагаю, что есть интерес к ответу, который использует регулярные выражения. Также вопрос указывает на то, что файл входных данных большой, поэтому я предполагаю, что производительность является важным фактором.
Я также предполагаю, что, учитывая, что входной файл содержит по одному имени файла на строку, не будет (патологических) имен файлов, содержащих символы новой строки.
Другие ответы фактически порождают процесс cp
для каждого файла. Это приводит к ненужному снижению производительности. Вместо этого мы можем использовать возможности xargs
для вызова cp
с таким количеством имен файлов, которое может поместиться в командной строке.
sed -rn 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' '\0' | xargs -0 cp -t /destdir
sed
использует регулярное выражение для соответствия закрытому числовому интервалу (50, 200)
. Использование регулярных выражений для числовых неравенств не всегда является самым элегантным занятием, но в этом случае требуемое выражение является довольно простым.
Мы предполагаем, что имена файлов не содержат символов новой строки, но могут содержать другие бесполезные символы, такие как пробелы. xargs
будет обрабатывать это правильно, если заданы \ 0
-деограниченные данные, поэтому мы используем tr
для преобразования всех символов новой строки в нулевые символы.
Сказанное выше предполагает наличие GNU-версий sed
и xargs
. Если вместо этого у вас есть версии BSD (например, OSX), тогда команда немного отличается:
sed -En 's/ (5[1-9]|[6-9].|1..)$//p' input.txt | tr '\n' '\0' | xargs -0 -J {} cp {} /destdir
Эти команды порождают ровно одну копию sed
, tr
и xargs
.Будет более одного порождения cp
, но каждый будет копировать несколько файлов - xargs
попытается заполнить каждую командную строку cp
, чтобы обеспечить эффективное использование . Это должно обеспечить значительное улучшение производительности по сравнению с другими ответами, когда входные данные большие.
Это невежественный ответ, поскольку у меня нет доступа к облачному каталогу Amazon с который это проверить. Но в духе «Как это сделать» : настройте облако Amazon для обслуживания NFS , затем войдите удаленно на этот сервер NFS с помощью cachefilesd
.
«Легче сказать, чем сделать ...»