我有一个文件夹/path/
,其中文件全部格式化为.filetype
,我希望执行:
grep -v [string] [filename] > [filename copy].filetype
对于此文件夹中的所有项目。我想我必须做cd /path.
并设置一个循环。我真的不熟悉语法,而且我不想弄乱任何东西,它的格式会是这样的吗:
for [something] in *.filetype
do
grep -v [string] [filename] > "[filename].filetype"
done
??
如果有帮助,我的文件没有以特定方式格式化**(例如按时间或日期),因此顺序并不重要,但我非常需要保留文件名。不确定这是否可能
预先感谢,抱歉,如果我让您头痛。
编辑:**
我的意思是说我的文件没有特定的组织方式。
答案1
你可以做:
(cd /path && grep -vFe 'string' -- /dev/null *.filetype) > result.filetype
添加/dev/null
可确保匹配的行以文件路径为前缀,即使只有一个*.filetype
文件也是如此。通过 GNU 实现grep
,您还可以使用该-H
选项。
将result.filetype
在当前工作目录中创建 ,而其他文件则在/path
.为了与模式result.filetype
匹配*.filetype
,您需要确保它不是从内部运行/path
,否则您可能会遇到一些无限循环,最终填满磁盘。
要递归查找*.filetype
文件,您可以使用find
:
(
cd /path &&
LC_ALL=C find . -name '*.filetype' -type f -exec \
grep -vFe 'string' -- /dev/null {} +
) > result.filetype
或者使用 GNU 实现grep
:
(
cd /path &&
LC_ALL=C grep -r --include='*.filetype' -vFe 'string' .
) > result.filetype
(请注意,它还会考虑隐藏文件)。
或与zsh
:
(cd /path && grep -vFe 'string' -- /dev/null **/*.filetype(.)) > result.filetype
答案2
这应该有帮助:
for f in *
do
grep -v [string] "$f" > "new_$f"
done