У меня есть список каталогов в файле, и я пытаюсь скопировать эти каталоги в указанное место назначения.
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 и принадлежат тому же пользователю / группе, которая выполняет команду.
Ваша непосредственная проблема заключается в том, что ваш файл 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 --