有没有办法只留下那些通过某些(可能是任何)条件的字符串?根据字符串本身匹配某种模式(使用 grep)这一事实来过滤字符串是很简单的。但是,如果我有一个文件名列表并且只想保留那些目录怎么办?如果我有一个 URL 列表,并且只想保留那些在获取 URL 时不返回 404 的 URL,该怎么办?等等。这种逻辑可以用 bash 推广吗?
例子:
$ echo $LIST
/home/me/a
/home/me/b
/home/me/b/some.jpg
$ echo $LIST | ${//%(!$SOME_FANCY_BASH_FILTERING_LOGIC_TO_CHECK_IF_THIS_IS_A_DIRECTORY&%^#}
/home/me/a
/home/me/b
Run Code Online (Sandbox Code Playgroud)
您正在谈论可能包含任何内容的列表。如果您有文件名列表,您可以轻松地使用 bash 对其进行迭代并选择目录。如果您有 URL 列表,您可以执行相同的操作来检查网络上存在哪些 URL。但是,当然,唯一可以概括的部分是迭代:
#!/bin/bash
IFS='
'
LIST='1
2
3
'
for I in $LIST
do
if [ -d $I ]; then
echo $I is a directory
elif [ -f $I ]; then
echo $I is a file
fi
done
Run Code Online (Sandbox Code Playgroud)
如果您有两个名为 1 和 3 的文件以及一个名为 2 的目录,则输出将为:
1 is a file
2 is a directory
3 is a file
Run Code Online (Sandbox Code Playgroud)
但如果您有 URL 列表,则必须更改循环内的测试条件。
归档时间: |
|
查看次数: |
14780 次 |
最近记录: |