簡體   English   中英

根據特定的行將文件從一個目錄移動到另一個目錄

[英]move files from one directory to another based on a specific line

我的目錄中有一些文本文件。 我想讀取此目錄中的所有文件,以及文件是否包含以下行

SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY將該文件及其所有內容移動到另一個目錄來進行組裝。

我怎樣才能做到這一點?

使用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

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM