Можно сделать это как это с GNU, находят и параллель GNU:
find . -type f -print0 | parallel -0 grep '"MY PATTERN"' '{} > {//}/matches.{/}'
Если файл abc.txt
содержит список родственника имен файлов от /path/to/base
:
ssh user@server tar c -T /path/to/abc.txt -C /path/to/base | (cd /tmp; tar xv)
Это создает tarball на лету, на самом деле не сохраняя его нигде, передайте его по каналу к локальной оболочке, извлечению, эффективно копируя перечисленные файлы.
ДОПОЛНИТЕЛЬНЫЙ TIPS
Если файл abc.txt
содержит список полных путей:
ssh user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)
Если файл abc.txt
находится в Вашей локальной системе, не удаленном:
ssh user@server tar c -T- < /path/to/abc.txt | (cd /tmp; tar xv)
Использовать gzip
сжатие (использующий уровень 6 по умолчанию):
ssh -C user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)
Использовать gzip
уровень 9 сжатия:
ssh user@server 'tar c -T /path/to/abc.txt | gzip -9' | (cd /tmp; tar zxv)
Я думаю, что концентратор Вашей проблемы - то, как извлечь корректные файлы из Вашего списка для Ваших последующих двух логических путей.
egrep 'example1.css|example2.css' abc.txt
даст Вам всем строки, которые соответствуют исключениям, и
egrep -v 'example1.css|example2.css' abc.txt
даст Вам всем строки, которые не соответствуют исключениям
Вот является простая ведьма сценария работами с файлами, содержащими пробелы в имени файла:
SAVEIFS=$IFS; IFS=$(echo -en "\n\b") ; for elt in `cat abc.txt` ; do scp $elt <YOUR_SFTP_CONNECTION> ; done ; IFS=$SAVEIFS
read
более устойчиво, посмотрите, Как циклично выполниться по строкам файла?.
– Gilles 'SO- stop being evil'
31.12.2013, 00:57