[英]How to find files with specific pattern in directory with specific number? Linux
我有一个名为folder1的文件夹,一直到folder150甚至可能更远..但我只想在某些文件夹中找到文本文件的完整路径(例如,从folder1到folder50)。
我认为以下命令可能有效,但这是不正确的。
find '/path/to/directory/folder{1..50}' -name '*.txt'
只要解决方案正确,它就不必使用find。
find /path/to/directory/folder{1..50} -name '*.txt' 2>/dev/null
或仅基名
find /path/to/directory/folder{1..50} -name '*.txt' -exec basename {} \; 2>/dev/null
或没有.txt的基本名称
find /path/to/directory/folder{1..50} -name '*.txt' -exec basename {} .txt \; 2>/dev/null
V. Michel的答案直接解决了您的问题; 补充说明 :
Bash的大括号扩展名仅适用于未加引号的字符串。 您的解决方案尝试使用单引号字符串,其内容根据定义被解释为文字 。
对比以下两个语句:
# WRONG:
# {...} inside a single-quoted (or double-quoted) string: interpreted as *literal*.
echo 'folder{1..3}' # -> 'folder{1..3}'
# OK:
# Unquoted use of {...} -> *brace expansion* is applied.
echo 'folder'{1..3} # -> 'folder1 folder2 folder 3'
请注意,在上面的第二个示例中,仅大括号表达式不加引号,这表明您可以在Bash中有选择地混合带引号和未引号的子字符串。
值得注意的是,它是-并且只能是-在这里执行括号扩展的Bash ,并且find
仅看到生成的文字路径。 [1]
find
仅接受文字路径作为文件名操作数。
(某些find
的原语(测试),例如-name
和-path
,确实支持glob (如问题所示),但不支持大括号扩展;以确保此类glob完整地传递给find
,而不会过早扩展由Bash加上引号 ;例如-name '*.txt'
)
[1]击执行括号扩展, 通配 (路径扩展)后可能发生, 此外 ,如在证实ehaymore的回答 ; folder(?,[1-4]?,50)
大括号扩展到令牌folder?
, folder[1-4]?
和folder50
,由于其中包含模式元字符( ?
, [...]
),因此其中的前两个会受到folder50
。 无论是否涉及遍历,目标程序最终只会看到生成的文字路径。
您可以为find命令提供多个目录,每个目录都与您要查找的模式匹配。 例如,
find /path/to/directory/folder{?,[1-4]?,50} -name '*.txt'
扩展为三种模式:
问号是一个单字符通配符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.