gpt4 book ai didi

linux - 在 bash 脚本中获取包含下划线的文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:31 25 4
gpt4 key购买 nike

在一个包含一堆文件的目录中,如下所示:

./test1_November 08, 2014 AM.flv
./test2.flv
./script1.sh
./script2.sh

我只想处理扩展名为 .flv 且没有下划线的文件。我试图消除带有下划线的文件,但运气不佳。

bash --version
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)

脚本:

#!/bin/bash

FILES=$(find . -mtime 0)
for f in "${FILES}"
do
if [[ "$f" != *_* ]]; then
echo "$f"
fi
done

这没有给我任何文件。将 != 更改为 == 会给我所有文件,而不仅仅是带下划线的文件。 Other answers on SO表明这应该有效。

我是不是漏掉了一些简单的东西?

最佳答案

您可以使用这个扩展的 glob 模式:

shopt -s extglob
echo +([^_]).flv

+([^_]) 将匹配 1 个或多个非下划线字符。

测试:

ls -l *flv
-rw-r--r-- 1 user1 staff 0 Nov 8 12:44 test1_November 08, 2014 AM.flv
-rw-r--r-- 1 user1 staff 0 Nov 8 12:44 test2.flv

echo +([^_]).flv
test2.flv

要循环处理这些文件,请使用:

for f in +([^_]).flv; do
echo "Processing: $f"
done

PS:不确定您是否在 find 中使用了 -mtime 0,因为我的回答是针对要求的:

I want to process only files that have an .flv extension and no underscore

关于linux - 在 bash 脚本中获取包含下划线的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com