Назад | Перейти на главную страницу

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

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

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

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

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

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

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

#!/bin/bash

while read filename; do
    cp -a "$filename" /path/to/dest
done < file_list.txt

Ты можешь сделать это

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
cat file_list.txt | tr '\n' '\0' | xargs -r0i  cp -t /path/to/dest/ "{}"