识别二进制文件名中的特定字符集

识别二进制文件名中的特定字符集

我正在尝试创建一个 bash 脚本来实现以下任务:

  1. 读取二进制文件名。
  2. 检查输入的二进制文件名是否包含A1B1(不区分大小写)。
  3. 取决于识别的字符串是否包含A1copy to dirA/,否则如果包含B1copy to dirB/

我目前已经解决了任务 1 和 2,但希望获得有关任务 2 的一些指导。

答案1

将当前目录中A1名称中包含该子字符串的所有文件复制到dirA(假设存在的目录),然后以相同的方式将B1名称中包含该子字符串的所有文件复制到:dirB

cp ./*A1* dirA/
cp ./*B1* dirB/

或者,用于--将命令行选项与文件名操作数分隔开,

cp -- *A1* dirA/
cp -- *B1* dirB/

这将忽略具有隐藏名称(以点开头的名称)的文件。如果需要包含这些内容,请在运行命令之前设置dotglobshell 选项。bashshopt -s dotglob


解决更新的问题,该问题涉及一个脚本,该脚本在命令行上接收一个或多个文件名,并且需要根据文件名将它们移动到正确的目录。

您可以用来case ... esac测试给定的字符串(文件名)是否与模式匹配,然后根据该测试的结果设置目标目录。在下面的代码中,如果两个模式都不匹配,我们还会输出一条警告消息:

#!/bin/sh

for filename do
    case $filename in
        *A1*) destdir=dirA ;;
        *B1*) destdir=dirB ;;
        *)
            printf 'Can not sort "%s", skipping it\n' "$filename" >&2
            continue
    esac

    cp -- "$filename" "$destdir"
done

再次假设目标目录存在。如果没有,您可能需要在cp命令之前创建它们,使用mkdir -p -- "$destdir" || exit.

相关内容