我要循环匹配扩展名的文件jpg或txt.我用:
for file in myDir/*.{jpg,txt}
do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
问题:如果目录根本不包含jpg文件,则循环将有一次带输出的迭代myDir/*.jpg.我认为*将被任意文件替换(如果不存在文件,则无法扩展).如何避免不必要的迭代?
我正在编写一个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/**的内容.
有没有办法使用这种方法并忽略这些目录?
我在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'黑客).
我有这个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"周围尝试使用和不使用引号.文件名和目录名中没有空格.
非常感谢你的想法.
对文件掩码进行 for 循环的正确方法是什么?
例如,如果掩码未扩展到任何文件,则不应运行循环;否则,它应该运行它扩展到的所有文件。
天真的方法的问题是,如果*不扩展到任何内容,那么整个循环将运行一次,就好像该*部分是文件名(实际上不存在的文件)的实际部分一样。
我正在编写一个脚本来将文件(例如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)
我怎样才能忽略不匹配的文件?