繁体   English   中英

如何在具有特定编号的目录中查找具有特定模式的文件? 的Linux

[英]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'

扩展为三种模式:

  • 夹? (匹配0-9)
  • 文件夹[1-4]? (匹配10-49)
  • 资料夹50

问号是一个单字符通配符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM