【问题标题】:Trying to create a folder and cp the file using text file尝试创建一个文件夹并使用文本文件 cp 文件
【发布时间】:2020-06-15 18:22:40
【问题描述】:

我正在尝试使用 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/ 后,我想将header-20-percent-off.gifheader-50-percent-off.gif 这两个gif 文件复制到那里。

【问题讨论】:

  • 我不关注。您想将文件复制到哪里?

标签: bash directory cp


【解决方案1】:

首先创建文件夹:

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

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

sed 's@^Changes/\(.*\)@zip2/\1\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) 或更好的是$(&lt;try.txt)

使用-t 选项和xargs 来查看它在做什么。

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

我相信,如果运气好的话,你可以将rsyncrsync --include-from=try.txt changes/ zip2/ 一起使用。

【讨论】:

  • 嗨,KamilCuk 感谢您的协助。我有点搞砸了我的问题。 txt 文件应为 zip2/EMAIL/header-20-percent-off.gif。而不是更改 zip2/EMAIL/header-20-percent-off.gif。有没有办法我可以更改 txt 所以我有 Changes zip2/EMAIL/header-20-percent-off.gif 。如果我能做到,那么你的代码就像我问的那样完美。是我的错
  • 好吧,将Changes 替换为zip2,将zip2 替换为Changes; ) 唯一关心的部分是sed 's@^Changes@zip2@'
  • zip2 文件夹已经创建了所有这些文件。如果你理解xD。我把你弄得很复杂..mb lmao
  • 不,我不明白。如果您想创建 Changes/... 而不是 zip2/... ,请使用 sed 's@^zip2@Changes@' 更改行上的前缀
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2021-11-24
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多