每次我使用 ls 或 find 列出文件时,我都必须使用一些繁重的模式匹配 + 重定向到临时文件以仅获取我想要的文件,然后在命令行中重用该列表(例如:移动它们,然后重命名,等等)。
有没有办法:
- 扫描一个目录并获取其中的内容列表,然后选择我们想要的(就像 SCM 微风对 git 所做的那样),这样我们以后就可以将选择通过管道传递给任何命令?
- 或者只是过滤任何输出来做到这一点(如手动grep)?
每次我使用 ls 或 find 列出文件时,我都必须使用一些繁重的模式匹配 + 重定向到临时文件以仅获取我想要的文件,然后在命令行中重用该列表(例如:移动它们,然后重命名,等等)。
有没有办法:
您可以获取文件列表并将它们保存在变量中:
list=*.txt
例如。然后,您可以$list
在需要文件时使用,尽管如果您在任何文件名中嵌入了空格(有使用数组的方法),这将不起作用。
如果您的文件名在文件中并且您希望它们在变量中,只需:
read list < filename
不知道为什么要将它们通过管道传输到命令中,但如果需要:
echo *.txt|some_command
我想你会在这个BashPitfalls中找到你想要的一切
这是一个例子:
while IFS= read -r -d '' file; do
some command "$file"
done < <(find . -type f -name '*.mp3' -print0)
还有一个:
shopt -s globstar
for file in ./**/*.mp3; do
some command "$file"
done