デフォルトでは、1..M個のディレクトリ(DIRA-DIRZ)を含む親ディレクトリ(PARENT)があり、各ディレクトリには0..N個のディレクトリ(DIR1-DIRN)が含まれており、各ディレクトリにはファイルリスト(FILEa -FILEz )が含まれています。 。
PARENT/DIRA/DIR1/files
PARENT/DIRB/files
PARENT/DIRC/DIR2/files
PARENT/DIRC/DIR3/files
...セカンダリディレクトリ(DIR1-DIRN)が存在する場合は、ファイルをセカンダリディレクトリ(DIR1)からそれを含むプライマリディレクトリ(DIRA)に移動し、現在空のセカンダリディレクトリ(DIR1)を削除します。
PARENT/DIRA/files
PARENT/DIRB/files
PARENT/DIRC/files
私はこの作品を使用しようとしていることがわかりました。
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;
ただし、外部ループとそれを統合する方法を理解することはできません。
提供できる助け、特に説明が役に立ちます!
ベストアンサー1
ほとんどすべてのLinuxディストリビューション(少なくともメジャーディストリビューション)にはPythonがプリインストールされているため、簡単なPythonスクリプトを書くのは簡単です。
#!/usr/bin/env python3
import sys
from pathlib import Path
def flatten_and_del(targdir):
pardir = targdir.parent
for f in targdir.glob("*"):
f.rename(pardir / f.name)
targdir.rmdir()
def process_dir(parent):
parent = Path(parent)
if not parent.is_dir():
raise RuntimeError(f"{parent} is not a directory!")
for f in parent.glob("*"):
if not f.is_dir():
continue
flatten_and_del(f)
if __name__ == "__main__":
process_dir(sys.argv[1])
たとえば、別の名前で保存し、tidy-dirs.py
次のように実行します。
python3 tidy-dirs.py path/to/PARENT
警告する:αГsнιιがコメントで述べたように、このアプローチは〜するファイル名が競合すると、データが失われる可能性があります。これが発生しないようにするには、実行する前に確認をflatten_and_del
追加してください。target.exists()
.rename()