[英]move files from one directory to another based on a specific line
我的目錄中有一些文本文件。 我想讀取此目錄中的所有文件,以及文件是否包含以下行
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" *
為您提供當前目錄中包含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
如果您有很多文件,bash可能無法擴展那么多文件(您將達到命令大小的限制...很多)。 然后,您必須訴諸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腳本,則需要“和文件[-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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.