
파일을 제외한 파일을 삭제하는 방법을 묻는 게시물이 많이 있지만 제 질문은 더 구체적입니다. migrations
현재 디렉터리의 하위 폴더에는 __init__.py
파일 등을 포함하는 여러 개의 폴더가 있습니다 . 현재 폴더의 __init__.py
이름이 지정된 모든 하위 폴더를 제외한 모든 파일을 삭제하는 방법은 무엇입니까 ?migrations
__init__.py
UPD: 빈 파일로 덮어쓰는 것도 가능한가요 ?
폴더 구조:
├── folder_1
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
├── folder_2
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
├── folder_3
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
답변1
와 함께 find
:
find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete
이는 find
현재 디렉터리( .
)에서 실행되며 다음을 수행합니다.
- 일치하는 항목이 있으면 명령
migrations/__init__.py
을 실행합니다truncate
.truncate -s 0 <file>
파일을 크기 0(비어 있음)으로 줄입니다. - 해당 일치에 실패하면 일치하는 모든 항목
migrations/*
이 삭제됩니다. - in bash 와 달리 in
*
경기 .-path
/
*
예:
$ tree
.
├── folder_1
│ └── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
│ └── __pycache__
│ ├── 0001_initial.cpython-35.pyc
│ └── __init__.cpython-35.pyc
├── folder_2
│ └── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
│ └── __pycache__
│ ├── 0001_initial.cpython-35.pyc
│ └── __init__.cpython-35.pyc
└── folder_3
├── admin.py
├── apps.py
├── __init__.py
└── migrations
├── 0001_initial.py
├── __init__.py
└── __pycache__
├── 0001_initial.cpython-35.pyc
└── __init__.cpython-35.pyc
9 directories, 15 files
$ find . -path '*/migrations/__init__.py' -exec truncate -s 0 {} + -o -path '*/migrations/*' -delete
$ tree
.
├── folder_1
│ └── migrations
│ └── __init__.py
├── folder_2
│ └── migrations
│ └── __init__.py
└── folder_3
├── admin.py
├── apps.py
├── __init__.py
└── migrations
└── __init__.py
6 directories, 6 files
$ wc -l */migrations/__init__.py
0 folder_1/migrations/__init__.py
0 folder_2/migrations/__init__.py
0 folder_3/migrations/__init__.py
0 total
답변2
.py 파일을 생성하고 경로(작업할 디렉터리)를 편집한 후 컴파일합니다(python3).
- 코드: 'target_folder' 내부의 'target_file'을 제외하고 'path'에 있는 모든 파일을 삭제합니다. 즉, 그냥 비어 있습니다.
import os, sys
path='/home/vitor/Desktop/teste/'
target_folder='migrations'
target_file='__init__.py'
for directory, subdirs, files in os.walk(path):
for file_name in files:
folder_name=os.path.split(os.path.abspath(directory))[-1]
if(folder_name==target_folder and file_name==target_file):
open(directory+'/'+file_name, 'w').close()
else:
os.remove(directory+'/'+file_name)
답변3
다음은 더 간단한 명령입니다. 누군가가 이미 질문에 답했다는 것을 알고 있지만 이러한 명령은 더 간단하고 고유해야 합니다. 작동하는지 확인해보세요.
__init__.py
삭제된 파일을 제외한 모든 하위 폴더와 파일을 제거하고 표시하려면 다음 명령을 시도하십시오.
rm -rfv ./*/migrations/!(__init__.py)
빈 파일을 만들려면 다음 명령을 추가하면 됩니다.
> ./*/migrations/__init__.py
위의 명령은 다음과 같이 빈 데이터를 파일에 쓰는 것과 같습니다.
/dev/null > ./*/migrations/__init__.py
메모
이 모든 명령은 현재 디렉터리에서 실행됩니다..
예방법
명령을 시도하기 전에 백업을 만드십시오. 이 세상에 100% 완벽한 사람은 없습니다.