1

每次我使用 ls 或 find 列出文件时,我都必须使用一些繁重的模式匹配 + 重定向到临时文件以仅获取我想要的文件,然后在命令行中重用该列表(例如:移动它们,然后重命名,等等)。

有没有办法:

  • 扫描一个目录并获取其中的内容列表,然后选择我们想要的(就像 SCM 微风对 git 所做的那样),这样我们以后就可以将选择通过管道传递给任何命令?
  • 或者只是过滤任何输出来做到这一点(如手动grep)?
4

2 回答 2

0

您可以获取文件列表并将它们保存在变量中:

list=*.txt

例如。然后,您可以$list在需要文件时使用,尽管如果您在任何文件名中嵌入了空格(有使用数组的方法),这将不起作用。

如果您的文件名在文件中并且您希望它们在变量中,只需:

read list < filename

不知道为什么要将它们通过管道传输到命令中,但如果需要:

echo *.txt|some_command
于 2012-08-31T12:10:41.780 回答
0

我想你会在这个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
于 2019-01-07T09:51:26.347 回答