在 shell 脚本中通过 if 条件搜索具有相似名称的文件
search for files with similar names by if condition in shell script
我正在尝试使用 shell 脚本中的 if 条件来检查工作目录中是否存在某些文件(以相似的名称开头)。
我的问题是我有多个文件即。 "A1.txt"、"A2.txt"、"A3.txt" 等在我的工作目录中。
现在我的问题是,有没有办法用文件名的字符串部分检查文件。因此,如果脚本至少找到一个文件名以 "A" 开头的文件,那么它会打印找到的文件,即没有文件名以 "A" 开头的文件,它不会打印出来。
我的尝试如下:
if [ -f "A*.txt" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
但它不起作用 returns "too many arguments"。有出路吗?
这可能是一种方式:
#!/bin/bash
check=`ls A*.txt 2> /dev/null`
if [ ! -z "${check}" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
然后如果需要,您可以使用正则表达式改进 check
变量,即只获取带有编号的文件,您可以执行类似 check=ls A[1-9]*.txt
的操作
此致
克劳迪奥
在BASH中你可以使用:
( shopt -s nullglob; set -- A*.txt; (( $# > 0 )) ) &&
echo "Files exist." || echo "Files don't exist"
当它找到匹配的文件时,它将退出并显示 0
并打印:
Files exist.
当它找不到任何与给定的 glob 模式匹配的 file/directory 时,它将退出并显示 1
并打印:
Files don't exist
解释:
shopt -s nullglob
如果 glob
没有匹配的文件,则 shell 会自动失败
set --
将给定参数分配给位置参数 ,,
等
$#
是位置参数的数量。如果找到任何匹配文件,它将被设置为大于零
((...))
用于bash
中的算术求值
(..)
为上面的命令创建一个子shell,这样当前shell的环境就不会受到影响
我正在尝试使用 shell 脚本中的 if 条件来检查工作目录中是否存在某些文件(以相似的名称开头)。 我的问题是我有多个文件即。 "A1.txt"、"A2.txt"、"A3.txt" 等在我的工作目录中。 现在我的问题是,有没有办法用文件名的字符串部分检查文件。因此,如果脚本至少找到一个文件名以 "A" 开头的文件,那么它会打印找到的文件,即没有文件名以 "A" 开头的文件,它不会打印出来。 我的尝试如下:
if [ -f "A*.txt" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
但它不起作用 returns "too many arguments"。有出路吗?
这可能是一种方式:
#!/bin/bash
check=`ls A*.txt 2> /dev/null`
if [ ! -z "${check}" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
然后如果需要,您可以使用正则表达式改进 check
变量,即只获取带有编号的文件,您可以执行类似 check=ls A[1-9]*.txt
此致
克劳迪奥
在BASH中你可以使用:
( shopt -s nullglob; set -- A*.txt; (( $# > 0 )) ) &&
echo "Files exist." || echo "Files don't exist"
当它找到匹配的文件时,它将退出并显示 0
并打印:
Files exist.
当它找不到任何与给定的 glob 模式匹配的 file/directory 时,它将退出并显示 1
并打印:
Files don't exist
解释:
shopt -s nullglob
如果glob
没有匹配的文件,则 shell 会自动失败
set --
将给定参数分配给位置参数,,
等$#
是位置参数的数量。如果找到任何匹配文件,它将被设置为大于零((...))
用于bash
中的算术求值
(..)
为上面的命令创建一个子shell,这样当前shell的环境就不会受到影响