2013-02-04 19 views

回答

4

使用findgrep

$ find . -type f -exec \ 
    fgrep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY" {} \; \ 
    | xargs -i% mv % /path/to/new/dir 
0

這很容易在bash:

grep -l "PATTERN" * 

爲您提供了包含在當前目錄模式的文件列表。所以,除非你有太多的文件,你可以這樣做:

mv `grep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY"` /another/directory 

背面蜱(他們沒有正常的引號)執行命令,並與輸出(在這種情況下,與文件的列表)來替換它。您可以使用$(command)來代替背部勾號。所以,你可以一樣好寫:

mv $(grep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY") /another/directory 

如果你有很多的文件,慶典可能無法擴大的很多文件,(你會達到你的命令多大的極限......這是很多)。然後,必須求助於xargs的:

grep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY" | xargs -i mv {} /another/directory 

的-i來xargs的裝置,這將需要一條線在一個時間從grep的輸出(匹配文件名),並且其中{}是將擴大到該文本和命令將運行。

0

這是python的解決方案。 os.path.isdir()是繞過子目錄所必需的。如果從源目錄運行這個.py腳本,則需要「和file [-3:]!='.py'」。或者,如果您需要移動.py文件,則可以檢查腳本的名稱。

import os 
import shutil 

src = '/source' 
dst = '/destination' 
pattern = 'SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY' 
for file in os.listdir(src): 
    if not os.path.isdir(file): 
    f = open(file) 
    for line in f: 
     if pattern in line and file[-3:] != '.py': 
     f.close() 
     shutil.move(file,dst) 
     break 
    f.close() 
相關問題