相关疑难解决方法(0)

如果文件名glob没有匹配,如何匹配任何内容

我要循环匹配扩展名的文件jpgtxt.我用:

for file in myDir/*.{jpg,txt}
do
  echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

问题:如果目录根本不包含jpg文件,则循环将有一次带输出的迭代myDir/*.jpg.我认为*将被任意文件替换(如果不存在文件,则无法扩展).如何避免不必要的迭代?

bash glob shopt

12
推荐指数
1
解决办法
1567
查看次数

循环使用Bash中的空目录内容

我正在编写一个shell脚本,我需要在其中循环遍历目录,然后循环遍历其中的文件.所以我写了这个函数:

loopdirfiles() {
    #loop over dirs
    for dir in "${PATH}"/*
    do
        for file in "${dir}"/*
            do
                echo $file
            done
    done
}
Run Code Online (Sandbox Code Playgroud)

问题是它在空目录上回复了类似*path/to/dir/**的内容.

有没有办法使用这种方法并忽略这些目录?

bash loops

6
推荐指数
2
解决办法
1688
查看次数

如果没有扩展名为.c的文件,bash for循环包括通配符(*.c).我怎么到处走走?

我在UNIX上使用bash(sparc 10)

for file in $SCPATH/$LIBNAME/*.{gob,c,cpp,h};
do
    ln -s $file;
done;
Run Code Online (Sandbox Code Playgroud)

问题是:如果没有扩展名为'c'的文件,它会将" .c"放在$ file中,而ln -s将创建一个指向' .c' 的链接.这是一个知道问题吗?我怎样才能绕过它(除了显而易见的'如果不是*.c'黑客).

unix bash shell scripting for-loop

3
推荐指数
1
解决办法
810
查看次数

Bash for in循环,在没有找到文件时执行错误

我有这个bash"for in"循环,它在目录中查找pdf文件并提示它们(为示例简化)

#!/bin/bash
for pic in "$INPUT"/*.pdf
do
    echo "found: ${pic}"
done
Run Code Online (Sandbox Code Playgroud)

当$ INPUT目录中有pdf文件时,此脚本运行良好,但是,当目录中没有pdf文件时,我得到:

发现:/home/.../input-folder/*.pdf

这是预期的行为吗?如何使用for循环来处理它?我需要使用ls还是找到?

我在"$ INPUT"周围尝试使用和不使用引号.文件名和目录名中没有空格.

非常感谢你的想法.

bash file-extension for-in-loop

2
推荐指数
1
解决办法
1080
查看次数

bash 循环遍历文件掩码

对文件掩码进行 for 循环的正确方法是什么?

例如,如果掩码未扩展到任何文件,则不应运行循环;否则,它应该运行它扩展到的所有文件。

天真的方法的问题是,如果*不扩展到任何内容,那么整个循环将运行一次,就好像该*部分是文件名(实际上不存在的文件)的实际部分一样。

bash filenames loops for-loop

2
推荐指数
1
解决办法
3101
查看次数

在 bash for 循环上扩展 glob 时忽略空匹配

我正在编写一个脚本来将文件(例如Dropbox Camera Uploads )移动到以年份命名的文件夹,如下所示:

#!/bin/bash
#
# Separate (camera) images on directory
# to year named folders.
#
# All files must be named as "yyyy-mm-dd HH:MM:SS.ext"
#
for img in *.{jpg,jpeg,png}; do
  year=${img:0:4}
  [ -d "$year" ] || mkdir "$year"
  mv -iv "$img" "$year/"
done
Run Code Online (Sandbox Code Playgroud)

该脚本对于匹配文件按预期工作,但是当没有任何具有某种扩展名的文件时,将扩展为*.ex(前两个扩展字符)。然后它创建空目录,如下所示:

'*.jp'
'*.jp'
'*.pn'
Run Code Online (Sandbox Code Playgroud)

我怎样才能忽略不匹配的文件?

bash glob

1
推荐指数
1
解决办法
1276
查看次数