尝试创建一个文件夹并使用文本文件复制文件

Trying to create a folder and cp the file using text file

我正在尝试使用 txt 文件创建一个文件夹并复制该文件。我有两种文件类型:

try.txt

Changes/EMAIL/header-20-percent-off.gif
Changes/EMAIL/header-50-percent-off.gif

名为 zip2 的文件夹的演示

 zip2/EMAIL/header-20-percent-off.gif
 zip2/EMAIL/header-50-percent-off.gif

代码:

mkdir -p dirname `xargs -a try.txt`
cp -R  {Dont know how this will work :( }

实际输出:

Changes/EMAIL/header-20-percent-off.gif/
             /header-50-percent-off.gif/

预期输出:

Changes/EMAIL/header-20-percent-off.gif
             /header-50-percent-off.gif

正如您所见,出于某种原因,它认为 header-20-percent-off.gifheader-50-percent-off.gif 是目录。

创建 Changes/Email/ 后,我想将两个 gif 文件 header-20-percent-off.gifheader-50-percent-off.gif 复制到那里。

首先创建文件夹:

<try.txt xargs -d$'\n' dirname | xargs -d$'\n' mkdir -p

然后复制文件。首先使用 sed 准备具有适当源目录和目标目录的流,然后传递给 xargs:

sed 's@^Changes/\(.*\)@zip2/\n&@' try.txt |
xargs -d$'\n' -n2 cp

但是如果你不精通bash,就逐行看流:

while IFS= read -r dest; do
   dir=$(dirname "$dest")
   mkdir -p "$dir"
   src=$(sed 's@^Changes@zip2@' <<<"$dest")
   cp "$src" "$dest"
done < try.txt

不要使用反引号 `,强烈建议不要使用它们。请改用 $(...) 进行命令替换。

仅在没有命令的情况下执行 xargs -a try.txt 毫无意义,只是 $(cat try.txt) 或更好的 $(<try.txt).

-t 选项与 xargs 一起使用,看看它在做什么。

使用 xargs -d$'\n' 明确指定分隔符 - 否则 xargs 将专门解析 " '\

我相信如果有一些运气和努力,你可以将 rsyncrsync --include-from=try.txt changes/ zip2/ 一起使用。