Оказывается, есть много решений в дополнение к приведенному выше;
screen sh jobscript.sh op1 op2 op3
отлично работает тоже хорошо.
Боюсь, cpio
я не смогу этого сделать, если только вы не выполните какой-нибудь дополнительный сценарий, чтобы определить путь к каталогу и пройтись по нему, чтобы извлечь пути ко всем файлам под ним, как способ «предварительно -] обработка" вашего файла списка.
Было бы намного проще использовать другой инструмент, такой какrsync
(обратите внимание на дополнительный -r
после --files-from
!):
rsync -a --files-from=my-files-to-copy.txt -r my/source/dir my/dest/dir
... илиpax
(стандартная утилита):
( cd my/source/dir && pax -w ) <my-files-to-copy.txt |
( cd my/dest/dir && pax -r )
... или с помощью pax
, если вы можете указать абсолютный путь к каталогу назначения:
( cd my/source/dir && pax -rw /my/dest/dir ) <my-files-to-copy.txt
... или BSDtar
(используйте -T
или --files-from=
вместо -I
с GNUtar
):
tar -c -f - -C my/source/dir -I my-files-to-copy.txt |
tar -x -f - -C my/dest/dir
Все это предполагает, что my-files-to-copy.txt
находится в текущем каталоге и что этот каталог может отличаться от каталога my/source/dir
.
Как упоминалось ранее в комментариях, cpio
поддерживает то, что вам нравится. Используйте, например.:
find src/main.js src/routes/index.js src/my-app/ | cpio -pdm my/dest/dir
Подводный камень этого метода заключается в том, что вам нужно запустить два процесса таким образом, который не ускорит работу, поскольку find
нужно stat(2)
все файлы, а cpio
также нужно stat(2)
все файлы некоторое время. позже и cpio
использует только один процесс для фактического копирования.
...или вы можете сделать это наиболее эффективным способом, используя мой собственный инструмент,star
(самую старую бесплатную реализацию tar):
star -copy -p -find src/main.js src/routes/index.js src/my-app/ my/dest/dir
Это эффективно, потому что star
использует libfind
в процессе star
, нужно вызывать stat(2)
только один раз для каждого файла и разветвляет второй процесс, который создает новые файлы одновременно с основным процессом star
, который читает файлы.
Во избежание замедления работы при использовании этого метода оба star
процесса совместно используют содержимое файла и метаданные файла через общую память.
Кстати, :вы, конечно, можете заменить список файлов из моих примеров чем-то вроде:
` cat my-file-list.txt `