Linux 使用bash识别多个文件类型
我很确定我以前见过这样做,但我记不起确切的语法 假设您有两个具有不同文件扩展名的文件:Linux 使用bash识别多个文件类型,linux,bash,shell,unix,command-line,Linux,Bash,Shell,Unix,Command Line,我很确定我以前见过这样做,但我记不起确切的语法 假设您有两个具有不同文件扩展名的文件: foo.txt bar.rtf index.html 您只需要在3个文件扩展名中的2个文件扩展名上运行命令,而不是对所有文件执行操作(cat*) 你不能这样做吗 cat${*.txt |*.rtf} 我肯定有一些find技巧可以首先识别文件并将它们传输到命令,但我认为bash支持我所说的内容,而不必这样做。Shell globbing比正则表达式更基本。如果要cat所有带有.txt或.rtf后缀的文件,只需
foo.txt
bar.rtf
index.html
您只需要在3个文件扩展名中的2个文件扩展名上运行命令,而不是对所有文件执行操作(cat*
)
你不能这样做吗
cat${*.txt |*.rtf}
我肯定有一些
find
技巧可以首先识别文件并将它们传输到命令,但我认为bash支持我所说的内容,而不必这样做。Shell globbing比正则表达式更基本。如果要cat
所有带有.txt
或.rtf
后缀的文件,只需使用:
cat *.txt *.rtf
glob模式将被扩展以列出与该模式匹配的所有文件名。在您的例子中,上面的命令将调用
cat
命令,并将foo.txt
和bar.rtf
作为其参数。Shell globbing比正则表达式更基本。如果要cat
所有带有.txt
或.rtf
后缀的文件,只需使用:
cat *.txt *.rtf
glob模式将被扩展以列出与该模式匹配的所有文件名。在您的情况下,上面的命令将调用
cat
命令,并将foo.txt
和bar.rtf
作为其参数。您需要的语法是cat*{txt,rft}
。使用逗号代替管道
$ echo foo > foo.txt
$ echo bar > bar.rft
$ echo "bar txt" > bar.txt
$ echo "test" > index.html
$ cat *.{txt,rft}
bar txt
foo
bar
$ ls *.{txt,rft}
bar.rft bar.txt foo.txt
但是有一种更简单的方法可以使用。您需要的语法是
cat*{txt,rft}
。使用逗号代替管道
$ echo foo > foo.txt
$ echo bar > bar.rft
$ echo "bar txt" > bar.txt
$ echo "test" > index.html
$ cat *.{txt,rft}
bar txt
foo
bar
$ ls *.{txt,rft}
bar.rft bar.txt foo.txt
但是有一种更简单的方法可以使用。这里有一种使用命令替换的简单方法。
cat$(find.-type f\(-name“*.txt”-o-name“*.rtf”\)
但这要简单得多。我也从中吸取了教训。这里有一个使用命令替换的简单方法。
cat$(find.-type f\(-name“*.txt”-o-name“*.rtf”\)
但这要简单得多。我也从中吸取了教训。注意-这是文件扩展名。您也可以使用
file
命令通过检查来获取实际类型。@Sobrique更新了我的问题以使其更准确。您可能还认为find-exec
和xargs
可以在列表上运行命令。注意-这是文件扩展名。您也可以使用文件
命令通过检查来获取实际类型。@Sobrique更新了我的问题,使其更加正确。您可能还认为find-exec
和xargs
可以在列表上运行命令。这正是我想要的,所以谢谢,尽管我可能会也可能不会使用shell globbing。谢谢我对此进行了升级,因为我不知道可以将Bash的花括号扩展与常规的POSIX shell globbing结合使用。这正是我想要的,所以谢谢,尽管我可能会也可能不会使用shell globbing。谢谢我对此进行了升级,因为我不知道可以将Bash的花括号扩展与常规的POSIX shell globbing结合使用。