尝试创建一个文件夹并使用文本文件复制文件
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.gif
和 header-50-percent-off.gif
是目录。
创建 Changes/Email/
后,我想将两个 gif 文件 header-20-percent-off.gif
和 header-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
将专门解析 "
'
和 \
。
我相信如果有一些运气和努力,你可以将 rsync
与 rsync --include-from=try.txt changes/ zip2/
一起使用。
我正在尝试使用 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.gif
和 header-50-percent-off.gif
是目录。
创建 Changes/Email/
后,我想将两个 gif 文件 header-20-percent-off.gif
和 header-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
将专门解析 "
'
和 \
。
我相信如果有一些运气和努力,你可以将 rsync
与 rsync --include-from=try.txt changes/ zip2/
一起使用。