我想知道如何在bash中列出ls
的文件,这些文件只会列出特定的文件子集?
例如,我有一个包含10000个文件的文件夹,其中一些文件名为:
temp_cc1_covmat
和temp_cc1_slurm
,但值1的范围是1-1000。
那么我如何只列出说temp_cc400_slurm
- temp_cc_499_slurm
?
我想这样做,因为我想在只以slurm结尾的超级计算机上排队文件。我可以sbatch *_slurm
,但文件夹中还有很多以_slurm
结尾的其他文件。
答案 0 :(得分:3)
您可以在Brace Expansion
中使用此bash
:
temp_cc{400..499}_slurm
要列出这些文件,请使用:
echo temp_cc{400..499}_slurm
或:
printf "%s\n" temp_cc{400..499}_slurm
甚至ls
:
ls temp_cc{400..499}_slurm
答案 1 :(得分:1)
使用?
通配符:
$ ls temp_cc4??_slurm
man 7 glob
:
Wildcard matching
A string is a wildcard pattern if it contains one of the characters
'?', '*' or '['. Globbing is the operation that expands a wildcard
pattern into the list of pathnames matching the pattern. Matching is
defined by:
A '?' (not between brackets) matches any single character.
参数列表太长错误也适用于?
。我使用ls test?????
进行了测试但是它有效但ls test[12]?????
我收到了错误。 (是的,您也可以ls temp_cc4[0-9][0-9]_slurm
。)