Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用bash识别多个文件类型_Linux_Bash_Shell_Unix_Command Line - Fatal编程技术网

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结合使用。