腳本來過濾文件
回答
簡單的循環會照顧它給你:
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