我有一个文件内的目录列表,并尝试将这些目录复制到指定的目的地。
测试.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,并且由执行命令的同一用户/组拥有。
答案1
您当前的问题是您的test.lst
文件似乎具有 DOS 样式的 CRLF 行结尾(CR 由\r
转义字符表示)。
您可以使用 转换文件dos2unix
,但是不要使用cat
,xargs -I {}
我建议删除 CR ,然后将分隔符sed
设置xargs
为换行符,例如。
sed 's/\r$//' test.lst | xargs -d '\n' cp -Rt ./_DEST --