Команда bash для копирования каталогов из списка, содержащего каталоги - появляется ошибка

У меня есть список каталогов в файле, и я пытаюсь скопировать эти каталоги в указанное место назначения.

test.lst:

dir1
dir2
dir three

Список находится в том же относительном пути, что и каталоги, а также место назначения, как таковое:

/dirs/dir1
/dirs/dir2
/dirs/dir three
/dirs/test.lst

Команда выполняется в ./dirs:

cat test.lst | xargs -I {} cp -R {} ./_DEST

Ожидаемый результат:

Directories in list copied from /dirs to /dirs/_DEST

Фактический результат:

[.../dirs] # cat test.lst | xargs -I {} cp -R {} ./_DEST
cp: cannot stat `dir1\r': No such file or directory
cp: cannot stat `dir2\r': No such file or directory
cp: cannot stat `dir three\r': No such file or directory

Я попытался добавить полный путь в список для каждого каталога (например, '/...dirs/dir1'), но без справки.
все каталоги были уменьшены до 777 и принадлежат тому же пользователю / группе, которая выполняет команду.

0
задан 21 December 2020 в 17:47

1 ответ

Ваша непосредственная проблема заключается в том, что ваш файл test.lst имеет окончания строк CRLF в стиле DOS (CR обозначается escape-символом \r).

Вы можете преобразовать файл с помощью dos2unix, однако вместо использования cat и xargs -I {} я предлагаю удалить CR с помощью sed, затем установите разделитель xargs на новую строку ex.

sed 's/\r$//' test.lst | xargs -d '\n' cp -Rt ./_DEST --
1
ответ дан 21 December 2020 в 15:29

Другие вопросы по тегам:

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