【问题标题】:Copying files using a manifest as reference使用清单作为参考复制文件
【发布时间】:2014-12-01 00:36:00
【问题描述】:

我需要将 /data/files 目录中的一堆文件移动到一个新的文件夹结构中。在 /data 目录中,我有一个清单文件,其中包含每个文件的完整工作路径。

源文件:

/data/files/this_file_1.sh
/data/files/this_file_2.sh

清单文件包含:

/path/to/where/file/goes/this_file_1.sh
/a/different/path/to/file/this_file_2.sh

我需要帮助编写一个可以在清单中找到文件名并运行复制命令的 shell 脚本。如果目录结构不存在,则创建它。

#!/bin/bash

for file_name in $(cat manifest); do
  name=$(basename $file_name);
  path= ??

  # Mkdir / Copy

done
  1. 如何从文件的完整路径中获取文件名?
  2. 如何在复制文件之前创建目录?

【问题讨论】:

  • help 意思是:让(某人)做某事更容易。那是不一样的:做整个工作而不是他的。请阅读How to Ask
  • 我知道帮助的定义。我正在寻求帮助 - 关于如何做某事的参考或指针,以便我可以自己编写脚本。不指望有人把所有事情都写得详细。我不熟悉如何在 shell 中读取文件并从完整路径中获取文件名以便能够将其放入数组中,以便对每个文件运行复制命令。
  • 我认为path 将等于file_name
  • 所以我可以获取文件名,我现在如何获取没有文件名的路径? path=$file_name 给了我完整的路径,最后是文件名。
  • dirname 以防你没有看到我的其他评论

标签: file shell copy directory


【解决方案1】:

我会让你编写完整的脚本,但这里有一些你可以使用的命令:

“在清单中查找文件名” - basename filepath

"验证它是否存在于 /data/files" - if [ -e filename ]; then ......

“运行复制命令”-cp location1 location2

“如果目录结构不存在,则创建它” - else mkdir /data/files 或您要创建的任何目录。

如果您对这些命令有任何疑问,请发表评论:-)

【讨论】:

  • 我希望能够复制清单中的所有文件。所以使用 grep 不会有用。这些文件已经存在,因为清单是在文件写入后创建的。
  • 我不确定我是否遵循。您想从现有清单中提取文件名吗? grep 的不足之处在哪里?编辑:在你更新你的问题后,我相信我明白了
  • 我不需要知道文件名才能使用 grep 吗?我需要从文件的完整路径中解析出文件名。
  • 是的,我会修改我的答案以反映这一点
  • 所以我可以从 file_name(base_name) 获取文件名,但我想我需要帮助的部分是读取清单,将每一行放入一个数组中,并能够从每个项目中解析出 file_name在数组中。
猜你喜欢
  • 2018-02-28
  • 2015-11-02
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2016-01-17
相关资源
最近更新 更多