脚本来过滤文件
回答
简单的循环会照顾它给你:
for x in `grep -l <your pattern> *`
do
cp $x <new path>/$x
done
只是柜面它在文件名称中的空格:
grep -l <your pattern> * | while read file
do
cp $file <new path>/$file
done
grep -r "term" . | sed -e 's/:.*//' | uniq | xargs -I {} cp -v {} /target/dir
..假设你在你的手有grep
。
创建一个批处理文件是这样的:
FOR /F "usebackq delims==" %%i IN (`findstr /M "xxx_string_to_search_xxx" c:\source\*.*`) DO copy %%i c:\destination\
它会用C SEACH为xxx_string_to_search_xxx:\源和这些文件复制到C:\目的地
的Python
import os
import shutil
for path, dirs, files in os.walk('path/to/dir'):
for name in files:
aFileName= os.path.join(path,name)
with open(aFileName, "r") as content:
if "myword" in content:
shutil.copy(aFileName, "path/to/other/dir")
这应该工作得很好。我没有广泛测试它,但你可以看到这是如何工作的。
假设Linux和使用bash shell的
#!/bin/bash
dest="/destination"
shopt -s nullglob
for file in *
do
grep "searchterm" "$file" && mv "$file" "$dest"
done
好的,如果我理解正确,你想:
- 文件移动到一个特定的目录
- 根据是否在文件中出现某个词或不
- 这应该对所有文件进行目录中的
如果我说得对,那其实很简单。
简短的回答:
for %%f in (*) do (
findstr "foo" "%%f" > NUL 2>&1
if not errorlevel 1 copy "%%f" "some_directory"
)
更详细的解释:
首先遍历一组文件(是的, “所有文件”,也是一组文件)可以使用for
命令轻松完成:
for %%f in (*) do ...
然后你想知道一个特定的单词(假设它是"foo"
)是否出现在文件中。这可以用findstr
命令来检查:现在
findstr "foo" "%%f"
,这将在默认情况下,输出的每个地方"foo"
被发现屏线。也许甚至错误信息,所以我们重定向到那些虚无:
> NUL 2>&1
findstr
返回一个特定的数字代码,根据给定的字符串是否被发现或没有。虽然你通常看不到它,但我们仍然可以测试它。这个特定的代码被称为错误级别,这预示着可能会回到Ye Olde DOS天,甚至可能是CP/M。无论如何,这个错误级别是0
或1
。当它为0时,表示文本被找到,当它是1
时,则文本未找到或发生其他错误。
有一个特殊的语法来测试有一个小怪癖的错误级别:它测试错误级别是否至少某个数字。因此,用于测试0
我们需要反转,但不要紧太多:
if not errorlevel 1 copy "%%f" "some_directory"
这将文件移到some_directory
,但如果误差水平不是至少1,在其他字:完全是0.这意味着我们在文件中搜索的文本已经找到。
全部放在一起,这个现在看起来如下:
for %%f in (*) do (
findstr "foo" "%%f" > NUL 2>&1
if not errorlevel 1 copy "%%f" "some_directory"
)
这是不是太狠了,是吗?
PS:我们可以缩短这一点,因为该批处理文件语言具有一种特殊的语法来执行命令只有当其他命令成功:
for %%f in (*) do (findstr "foo" "%%f" >NUL 2>&1 && copy "%%f" "some_directory")
我们得到了它成一个单一的现在在线。但由于copy
还输出文本,我们可以将重定向到该行的末尾赶上findstr
无论是产量和copy
输出:
for %%f in (*) do (findstr "foo" "%%f" && copy "%%f" "some_directory") >NUL 2>&1
而且因为它是一个单一的线,我们不需要一个批处理文件了(当然,严格来说,我们并不需要在此之前,无论是),可撤销该双%
直接在命令行中运行它:
for %f in (*) do @(findstr "foo" "%f" && copy "%f" "some_directory") >NUL 2>&1
我包括左括号之前的@
抑制正在运行的命令的输出,否则你的s creen会很快完成所运行的命令。在批处理文件中,通常只包含第一行的@echo off
。
- 1. bash脚本过滤JSON文本
- 2. 如何使用脚本组件过滤平面文件源
- 3. Pig脚本/命令来过滤多个字符串上的文件
- 4. PowerShell脚本忽略过滤
- 5. 检测到过载的图片(过滤脚本)垃圾邮件的文本?
- 6. Java 8流过滤器来过滤文件的特定部分
- 7. PHP搜索/过滤文本文件
- 8. 在C#中过滤文本文件
- 9. 过滤文本文件的行
- 10. 过滤存储过程的脚本
- 11. 通过perl脚本过滤C++?
- 12. 使用LINQ来过滤XML文件
- 13. Ansible模块来过滤文件内容
- 14. 将文本文件过滤为新的文本文件
- 15. Subclipse/Subversive:任何方式来过滤本地修改的文件
- 16. 写一个脚本来做postfix的内容过滤
- 17. 寻求一个PHP脚本来过滤一个RSS源
- 18. CMD /猛砸/批处理脚本来获得项目/过滤器
- 19. 使用shell脚本进行文本过滤
- 20. WordPress的过滤文本中的局部脚本
- 21. 记事本++文件过滤器
- 22. 如何通过shell脚本来源文件
- 23. Dropzone过滤文件
- 24. 使用jQuery的tablesorter过滤器来过滤列的文本的开始
- 25. PowerShell的犯规脚本过滤索引
- 26. shell脚本过滤器问题
- 27. 过滤器使用shell脚本工具
- 28. Elasticsearch过滤查询与脚本词频
- 29. Shell脚本来验证文件名
- 30. Python脚本来复制文件
grep是你的朋友。 – miku 2010-01-06 13:13:39
陈述您的操作系统,下次您可以使用哪些工具 – ghostdog74 2010-01-06 14:46:29
“批处理”标记*通常包含有关Windows批处理文件或SQL批处理插入的问题。迄今为止几乎没有例外。 – Joey 2010-01-06 22:26:33