Python 基于特定行将文件从一个目录移动到另一个目录
我在目录中有一些文本文件。我想读取这个目录中的所有文件,如果文件有以下行Python 基于特定行将文件从一个目录移动到另一个目录,python,bash,awk,grep,Python,Bash,Awk,Grep,我在目录中有一些文本文件。我想读取这个目录中的所有文件,如果文件有以下行 SAMPLE 350可以通过将该文件及其所有内容移动到另一个目录来组合类型为DECIMAL:的整数 我如何才能做到这一点?使用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
SAMPLE 350可以通过将该文件及其所有内容移动到另一个目录来组合类型为DECIMAL:的整数
我如何才能做到这一点?使用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
使用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
反勾号(它们不是普通引号)执行命令并用输出(在本例中是文件列表)替换它。您可以使用$(命令),而不是反勾号。所以你可以写:
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(匹配的文件名)的输出中一次提取一行,{}将被扩展到该文本,命令将运行。这在bash中很容易:
grep -l "PATTERN" *
提供当前目录中包含模式的文件列表。因此,除非文件太多,否则您可以:
mv `grep -l "SAMPLE 350 AN INTEGER OF TYPE :DECIMAL : CAN BE ASSEMBLED BY"` /another/directory
反勾号(它们不是普通引号)执行命令并用输出(在本例中是文件列表)替换它。您可以使用$(命令),而不是反勾号。所以你可以写:
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脚本,则需要“and文件[-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()
这里有一个python解决方案。绕过子目录需要os.path.isdir()。如果从源目录运行此.py脚本,则需要“and文件[-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()