for f in $(for i in $(find Balzac/ -iname "20??????.txt"); do echo $i; done); do cat $f|cut -c 10-21; done|sort|uniq|egrep -Re "[0-9][0-9][0-9]-[0-9][0-9][0-9].mp3"
从我们使用的基于.txt的播放列表中生成一个排序的,未列出的所有mp3的列表。
a=$(for f in $(for i in $(find Balzac/ -iname "20??????.txt"); do echo $i; done); do cat $f|cut -c 10-21; done|sort|uniq|egrep -Re "[0-9][0-9][0-9]-[0-9][0-9][0-9].mp3")
虽然只包含该列表的最后一个值。
知道为什么以及如何在我的变量中使用整个列表?我迷失了......
最后,我需要上面的两个变体来比较/区分输出,看看两个目录中包含的文件有什么不同。
答案 0 :(得分:1)
您通过重载运算符使这变得不必要地复杂化。您可以将其嵌套大约三个级别并保持功能。
a=$(find Balzac/ -iname "20??????.txt" -exec cat {} + | cut -c 10-21 | sort | uniq | egrep -Re "[0-9][0-9][0-9]-[0-9][0-9][0-9].mp3")
事实上,我猜你接下来要做的就是迭代这些文件。如果是这样,你可以跳过变量赋值并使这样的内容可读:
find Balzac/ -iname "20??????.txt" -exec cat {} + |
cut -c 10-21 |
sort | uniq |
egrep -Re "[0-9][0-9][0-9]-[0-9][0-9][0-9].mp3" |
while read file; do
#Do something with $file
done