Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- 리버싱
- 스위치
- bastion host
- 자바
- Reversing
- Firewall
- abex'crackme
- RIP
- AI
- STP
- AWS
- 네트워크
- 온프레미스
- docker
- cmd
- vector
- Repository
- Mac
- Screening Router
- 머신러닝
- vlan
- Java
- CISCO
- dreamhack
- 크롤러
- 라우터
- 머신러닝 프로세스
- 인공지능
- 암호학
Archives
- Today
- Total
Haekt‘s log
[Python3] Linux 디렉토리 안의 파일 리스트 뽑아오기. 본문
Python 프로젝트를 진행하던 중, 디렉토리 안의 특정 파일을 따로 뽑아와야 하는 상황이 발생했다.
그래서 OS 모듈을 사용하여 특정 디렉토리의 파일 리스트를 뽑아오도록 했다.
코드는 생각보다 매우 간단하다.
- 특정 디렉토리의 파일 리스트 뽑아오기 (폴더 포함)
# OS 모듈을 import
import os
# os.listdir( ) 함수에 특정 디렉토리 경로 입력하여, 디렉토리 안의 파일들을 리스트로 저장.
file_list = os.listdir('경로') # ex) os.listdir('/home/hello/test1')
# 파일 리스트 출력
print(file_list)
위의 코드만 작성해도, 간단하게 디렉토리 안의 파일들을 리스트로 뽑아올 수 있다.
단, 파일이 들어있는 폴더의 경우에는 안의 파일이름 까지는 뽑아오지 않는다. 폴더 이름만 뽑아오게 된다.
예를 들어 /test1/test1-1 디렉토리 안에 test1.txt, test2.txt 가 있을 때, test1의 리스트를 뽑으면 test1-1 만 뽑아진다는 말이다.
- 예시 ( 특정 폴더 안의 .exe 파일만 골라 모으기 )
내 경우에는 portableapps프로그램을 통해 여러 프로그램 exe파일을 수집하려고 했는데,
다운로드 받아보니 portableapps 폴더 안에 프로그램 이름으로 된 폴더가 있고, 그 안에 .exe 파일 및 설명 txt 파일이 섞여 있었다.
# 예시
/portableapps/program1
/portableapps/program1/hello1.exe
/portableapps/program1/hello1.txt
/portableapps/program2
/portableapps/program2/hello2.exe
/portableapps/program2/hello2.txt
/portableapps/program3
/portableapps/program4
...
이 경우에 .exe 파일만을 따로 모으려면, 일일히 프로그램 폴더마다 들어가서 옮겨야 했다.
일일히 하는 것은 시간낭비이므로, 아래와 같은 코드를 작성했다.
import os
# 파일경로
pwd = "/mnt/hgfs/portableapps/PortableApps"
# 실패한 파일 리스트
failelist = []
# 찾을 파일의 조건 ex) .exe
find=".exe"
def movefile(file_list):
fail=[]
for program in file_list:
if find in program:
try:
os.system("cp "+pwd+"/"+folder_name+"/"+program+" /home/sai/mal_sha256/normalfile/"+program)
except:
# 복사 실패시, 실패한 파일의 경로 반환.
print(program+" move fail")
fail.append(program)
continue
print("moved exe filename : "+program)
return fail
# 파일경로의 프로그램이 파일이 담긴 폴더들을 가져옴
folder_list = os.listdir(pwd)
# 폴더들을 순서대로 반복
for folder_name in folder_list:
try:
print("\nfolder name : "+folder_name)
# 프로그램들이 담긴 폴더들을 순서대로 반복
file_list = os.listdir(pwd+"/"+folder_name)
failelist=movefile(file_list)
except:
pass
# 실패한 목록 재시도 and 재시도 실패 목록 출력
print("\n\n------------ move fail list ------------")
for fail in movefile(failelist):
print(fail)
'언어 > Python' 카테고리의 다른 글
[Python3] 정규표현식을 이용한 크롤러 만들기 (0) | 2023.03.06 |
---|---|
[Python3] 간단한 웹 크롤러 만들기 (0) | 2023.03.06 |
[Python2] SyntaxError: Non-ASCII character '\xec' in file ... (0) | 2023.03.05 |
Comments