ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – 查看文件夹中的文件是否存在于其他文件夹中的其他名称下

2019-08-16 12:52:22  阅读:292  来源: 互联网

标签:bsd linux filenames shell-script


可能有点不正确的英语:

至少有2个文件夹.为此,A包含没有扩展名的文件,通常是用户名,B包含类似的文件,扩展名为“.yml”,或者可能没有扩展名,甚至包含其他扩展名,但情况并非总是如此.

如何查看A文件夹中的文件是否存在于B中,可能在不同的扩展名下,而不使用Python等脚本语言?制作Python脚本对我来说并不是什么问题,但为了便于携带,我更喜欢shell脚本,我很擅长.更不用说我不知道​​所有的命令.

如果这也可以在非Linux系统中完成,特别是BSD,这是唯一的好处.

编辑0:名称的差异并不总是扩展名,名称可能在同一文本之前或之后有字符.例如,如果A有一个名为foobar的文件,它可以在B中命名为location_foobar.否则名称将不会更加不同,如foo1bar,这是完全不同的东西,因此脚本不会寻找这样的差异.

解决方法:

编写一个shell脚本,循环遍历一个目录的文件并查找是否有一个带有超级字符串的文件作为其他目录中的名称,这是一件简单的事情.

#!/bin/sh
dirA=$1
dirB=$2
for x in "$dirA/"*; do
  base_name="${x##*/}"
  set -- "$dirB"/*"$base_name"*
  if [ -e "$1" ]; then
    for y; do
      echo "$base_name found in B as ${y##*/}"
    done
  else
    echo "$x not found in B"
  fi
done

这可以移植到任何Bourne / POSIX风格的shell(sh,ash,bash,ksh,…).使用了一些shell结构:

>#!/ bin / sh:每个脚本顶部的shebang
> $1,$2:传递给脚本A和B的两个参数
> ${x ## * /}是x的值减去形式* /的最长前缀,即$x减去最后一个/的所有内容,即${x ## * /}是$x之后的$x的一部分最后/.
> set – “B / ${x ## * /}.”*将位置参数设置为B中匹配文件的列表.如果没有匹配项,则模式保持未展开状态,因此将第一个位置参数设置为以.*结尾的字符串.
>为y;对位置参数进行循环.

标签:bsd,linux,filenames,shell-script
来源: https://codeday.me/bug/20190816/1667393.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有