我有一个包含数百个文本文件的文件夹,我想运行一个名为mint
的Linux命令。此命令输出我想要存储在唯一文件中的文本值,每个文件对应一个文件夹。有没有办法使用*
字符来运行命令来表示我的所有输入文件,同时仍然将输出汇总到一个独立于其他文件的文件中?
实施例:
$ mint * > uniqueFile.krn
答案 0 :(得分:0)
修复错误并完成警告:
#!/bin/bash
# ^^^^ - bash, not sh, for [[ ]] support
for f in *.krn; do
[[ $f = *.krn ]] && continue # skip files already ending in .krn
mint "$f" >"$f.krn"
done
或者,使用前缀:
for f in *; do
[[ $f = int_* ]] && continue
mint "$f" >"int_$f"
done
除非源文件发生更改,否则您还可以避免重新创建已存在的哈希值:
for f in *; do
# don't hash hash files
[[ $f = int_* ]] && continue
# if a non-empty hash file exists, and is newer than our source file, don't hash again
[[ -s "int_$f" && "int_$f" -nt "$f" ]] && continue
# ...if we got through the above conditions, then go ahead with creating a hash
mint "$f" >"int_$f"
done
解释:
test -s filename
才为真
仅当两个文件都存在且<{1}}比test file1 -nt file2
更新时,file1
才为真。file2
是从[[ ]]
命令派生的ksh扩展shell语法,添加了对模式匹配测试的支持(即。test
仅在{{1}时才为真扩展到以[[ $string = *.txt ]]
结尾的值,并放宽引用规则(编写$string
是安全的,但.txt
需要引号才能使用所有可能的文件名。)答案 1 :(得分:0)
感谢所有的建议! Shiping的解决方案运行良好,我只是在文件名后附加了一个前缀。像这样:
$ for file in * ; do mint $file > int_$file ; done
自我回答来自问题并标记为社区Wiki;见What is the appropriate action when the answer to a question is added to the question itself?