系统相关
首页 > 系统相关> > linux – 查看文件夹中的文件是否存在于其他文件夹中的其他名称下

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

作者:互联网

可能有点不正确的英语:

至少有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