Shell Bash检查文件名是否包含字符串

Oto*_*man 0 bash shell

我在创建一个if语句来检查我的目录中的文件是否有名称中的某个字符串时遇到了问题.

例如,我在某个目录中有以下文件:

file_1_ok.txt
file_2_ok.txt
file_3_ok.txt
file_4_ok.txt
other_file_1_ok.py
other_file_2_ok.py
other_file_3_ok.py
other_file_4_ok.py
another_file_1_not_ok.sh
another_file_2_not_ok.sh
another_file_3_not_ok.sh
another_file_4_not_ok.sh
Run Code Online (Sandbox Code Playgroud)

我想将包含的所有文件复制1_ok到另一个目录:

#!/bin/bash
directory1=/FILES/user/directory1/
directory2=/FILES/user/directory2/


string="1_ok"
cd $directory

for every file in $directory1
do
    if [$string = $file]; then
        cp $file $directory2
    fi
done
Run Code Online (Sandbox Code Playgroud)

更新:

更简单的答案是由Faibbus做出的,但如果你想删除或只是移动没有你想要的特定字符串的文件,请参考Inian.

其他答案也是有效的.

Fai*_*bus 8

cp directory1/*1_ok* directory2/
Run Code Online (Sandbox Code Playgroud)

  • 如果有太多匹配文件适合单个命令行,@ hex2mgl`find`非常有用; 你应该取消删除你的答案. (3认同)