копировать файлы, получать имена файлов из списка

Я использую команду:

xargs -a file_list.txt cp -t /path/to/dest

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

что можно сделать?

-1
задан 30 July 2016 в 13:57
3 ответа
cat file_list.txt | tr '\n' '\0' | xargs -r0i  cp -t /path/to/dest/ "{}"
1
ответ дан 5 December 2019 в 19:00

Xargs хорош / быстр / и т. Д., Но его непросто понять новичкам в написании сценариев оболочки.

Я думаю это будет намного более читабельным (и более чистым, чем в подоболочке).

#!/bin/bash

while read filename; do
    cp -a "$filename" /path/to/dest
done < file_list.txt
3
ответ дан 5 December 2019 в 19:00

Это можно сделать

IFS=$'\n' ; for file in `cat file_list.txt` ; do cp $file /path/ ; done

Объяснение

  1. Установить внутренний разделитель полей на новую строку
  2. Прочитать file_list.txt и пройти через каждую строку, назначая содержимое строки переменной с именем $ file
  3. В каждом цикле выполните команду cp для $ file (вы также можете добавить больше шагов)

Если бы это был сценарий оболочки и красиво отформатированный

#!/bin/bash

IFS=$'\n'

for file in `cat file_list.txt` ; do {
  cp $file /path/
} done
2
ответ дан 5 December 2019 в 19:00

Теги

Похожие вопросы