我正在尝试检查文件是否存在,但是使用通配符.这是我的例子:
if [ -f "xorg-x11-fonts*" ]; then
printf "BLAH"
fi
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有双引号.
你会怎样用bash来判断某个目录中是否存在特定扩展名的文件?
就像是
if [ -e *.flac ]; then
echo true;
fi
Run Code Online (Sandbox Code Playgroud) 我必须得到一个包含大约200万个文件的目录列表,但是当我ls对它执行命令时,什么都没有回来.我等了3个小时.我试过了ls | tee directory.txt,但这似乎永远挂了.
我假设服务器正在进行大量的inode排序.有没有办法加快ls命令只是获取文件名的目录列表?我此时并不关心大小,日期,许可等.
我想检查带有通配符的模式是否与/var/data/**/*.xml磁盘上的任何文件或目录匹配。
显然我可以使用,Dir.glob但是当有数百万个文件时它非常慢,因为它太急切了 - 它返回与模式匹配的所有文件,而我只需要知道是否有任何文件。
有什么办法可以检查吗?
我在bash shell中编写了以下代码.它应该采用位置参数,如果它以短划线" - "开头,则应该输入错误消息.
但由于某种原因,if语句总是被跳过.它只有在字面上输入时才起作用 - *
我得到的印象是修复与"$"有关.
以下是代码片段:
EXECNAME=$1
if [ "$EXECNAME" = "-*" ]; then
echo "error: invalid executable name"
fi
Run Code Online (Sandbox Code Playgroud) 在继续处理该文件之前,我想检查是否只有一个文件实例存在。
我可以使用以下命令检查存在多少个实例:
ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l;
Run Code Online (Sandbox Code Playgroud)
但是,当我在 if 语句中使用它时,会警告我ls: command not found.
if [ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l = '1']
then
echo "Only 1 File Exists";
fi
Run Code Online (Sandbox Code Playgroud)
我尝试在 ls 命令的末尾添加一个分号并将其括在方括号中 - 这些都没有产生任何结果。
我很少需要编写任何 Shell 脚本,我怀疑这是一个非常基本的错误,因此非常感谢任何帮助。
是否可以在bash中使用正则表达式检查文件是否存在?
我尝试如下:
if [ -f /path/to/file*.txt ]
Run Code Online (Sandbox Code Playgroud)
但不幸的是这不起作用。
有谁知道这怎么可能?
我有这个
if [[ -e file.jpg ]] ;then echo "aaaaaaaaa"; fi
Run Code Online (Sandbox Code Playgroud)
并打印出"aaaaaaa"
但是如果还有file.png或file.png我想要打印
所以我需要这样的东西
if [[ -e file.* ]] ;then echo "aaaaaaaaa"; fi
Run Code Online (Sandbox Code Playgroud)
但它不起作用我在语法中遗漏了一些东西
谢谢
在几个手册(包括官方GNU/Linux命令行工具tldp.org)中,建议使用单引号(或双引号)来避免bash解释通配符或正则表达式符号,如插入符号(^)和美元($).
但在一些例子中,没有必要使用单/双引号.例如:
(1)
$ touch 'fo*'
Run Code Online (Sandbox Code Playgroud)
和
$ touch fo*
Run Code Online (Sandbox Code Playgroud)
fo*在两个命令行窗体中创建相同的文件.
(2)
$ grep '^foo' file.txt
Run Code Online (Sandbox Code Playgroud)
和
$ grep ^foo file.txt
Run Code Online (Sandbox Code Playgroud)
都foo在file.txt行的开头搜索一个字符串.
为什么手册建议使用单/双引号来避免bash解释,如果bash实际上不首先解释一些通配符和正则表达式符号?