首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bash实现具有相对路径的cmp多个文件

如何使用bash实现具有相对路径的cmp多个文件
EN

Stack Overflow用户
提问于 2018-06-29 00:55:45
回答 1查看 831关注 0票数 1

我有一个名为文件系统的目录,它看起来有点像这样:

代码语言:javascript
复制
- filesystem
  - etc
    - systemd
      - system
        - custom.service
        - custom2.service
  - hostname

这些文件被复制到根目录中,然后需要进行验证。例如:filesystem/etc/hostname被复制到/etc/hostname中。

我尝试过编写bash脚本来比较文件系统中的每个文件。

代码语言:javascript
复制
for file in $(find filesystem -type f)
do
  cmp file ${file#filesystem}
done

${file#filesystem}的目的是从第二个文件的路径中删除“文件系统”。

这是不工作的-它返回‘没有这样的文件或目录’。如何修正这段代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 11:45:26

正如注释中所指出的,代码的具体问题是缺少一个$来展开file。也就是说,每当文件名包含任何ls字符时,处理findIFS的输出都会遇到问题。空格是一个常见的例子,但是换行符会绊倒许多处理空格的尝试。

解决这个问题的一个选择是将-execfind一起使用并调用一个shell,因为您需要一些用于参数扩展的shell功能。

在这里,我们将使用带有字符串的sh -c来运行,这是cmp命令,我们将传递sh 2参数--第一个参数是占位符,它是shell的名称,第二个参数是文件名:

代码语言:javascript
复制
find filesystem -type f -exec sh -c 'cmp "$1" "${1#filesystem}"' _ {} \;

我们引用sh -cfind中的变量,以确保{}作为单个参数正确传入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51092926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档