筆記

筆記

有很多帖子都詢問如何刪除文件之外的文件,但我的問題更具體。migrations目前目錄的子資料夾中有幾個名為的資料夾,其中包含__init__.py檔案等。如何刪除目前資料夾__init__.py中除所有子資料夾之外的所有檔案migrations

UPD:是否可以__init__.py用空檔案覆蓋?

資料夾結構:

├── 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不同。-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)。

  • 程式碼:刪除「path」上除「target_folder」內的「target_file」之外的所有文件,這些文件只會清除(空)。
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%完美的。

相關內容