我在目錄中有一些文本文件。我想讀取此目錄中的所有文件,如果該文件具有以下行:基於特定行將文件從一個目錄移動到另一個目錄
SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY
將該文件及其所有內容移動到另一個目錄。
我怎樣才能做到這一點?
我在目錄中有一些文本文件。我想讀取此目錄中的所有文件,如果該文件具有以下行:基於特定行將文件從一個目錄移動到另一個目錄
SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY
將該文件及其所有內容移動到另一個目錄。
我怎樣才能做到這一點?
使用find
和grep
:
$ find . -type f -exec \
fgrep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY" {} \; \
| xargs -i% mv % /path/to/new/dir
這很容易在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的輸出(匹配文件名),並且其中{}是將擴大到該文本和命令將運行。
這是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()