ネストされたディレクトリのフラット化 & Mac OS X のコマンドラインからのファイル階層

Anonim

すべてのファイルの内容をディレクトリの子フォルダーから 1 つのフォルダーに移動して、ディレクトリ構造をフラット化する必要が生じたことはありませんか? Mac OS X または Linux のファイル システムからファイルやフォルダを手動で移動することでこれを行うことができますが、より迅速なオプションはコマンド ラインを使用することです。おそらく、ある時点でディレクトリのネストされた階層を作成し、それらのネストされたフォルダからすべてのファイルを移動して単一のディレクトリに戻すことで、元に戻す必要があるか、ディレクトリ構造を単純化しようとしている可能性があります。トリックは非常にうまく機能します。

コマンド ラインを使用してファイルとディレクトリ構造をフラット化することは、一般的にターミナルの使用に慣れている上級ユーザー向けであることは明らかです。それが説明できない場合は、Finder を使用して手動で行うことを検討してください。 、または Mac Automator アプリを使用して、ファイル システム アクティビティの同様の自動化を実現します。ただし、ここではコマンドラインからのディレクトリのフラット化に焦点を当てています。

ネストされたファイル ディレクトリのフラット化の例

何を達成しようとしているのかをよりよく理解するために、ユーザーのホーム フォルダにある TestDirectory という架空のディレクトリ構造の例を見てみましょう。この例では、TestDirectory に SubDirectory1、SubDirectory2、SubDirectory3 などのサブフォルダーが含まれており、それぞれのフォルダーにファイルがあります。ここで行おうとしているのは、ディレクトリ構造をフラット化し、すべてのファイルを SubDirectory(X) から親ディレクトリ「TestDirectory」に移動することです。を使用して再帰的に表示される最初のディレクトリと内容は、次のようになります:

$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg

このディレクトリとサブディレクトリの内容をフラット化して TestDirectory フォルダに戻すには、次のコマンド文字列を使用します:

find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

ディレクトリの内容がフラット化された後、一覧表示すると次のようになります:

~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg

サブディレクトリはまだ存在することに注意してください。それらは空になります。わかる?そうでない場合、またはそれが達成したいことを示していない場合は、ディレクトリをまったくフラット化したくない可能性があります。おそらく、マージまたは ditto を使用して、別の場所への複雑なコピーを実行しようとしています。

コマンドラインによるディレクトリ構造とネストされたファイル階層のフラット化

続行する準備はできましたか?ディレクトリ構造をフラット化し、すべてのファイルをサブディレクトリからターゲット ディレクトリのベースに移動するために使用するコマンド文字列は次のとおりです。

find -mindepth 2 -type f -exec mv -i '{}' ';'

上記の例に示すように、フラット化する選択したディレクトリに置き換えます。

はい。ディレクトリはコマンド文字列に 2 回表示されます。1 回目はサブディレクトリを平坦化するために検索されるディレクトリであり、2 回目は見つかったアイテムの宛先です。

指定された目的地は正確に指定してください。これは元に戻すことはできないため (少なくとも、多くの手動作業を行わなければ)、移転することが絶対に確実な場合にのみ行ってください。ターゲット ディレクトリの子ディレクトリ内のすべてのファイルをターゲット ルート フォルダに戻します。

前述のように、OS X の Finder でこれを行うこともできます。または、少なくとも Finder でファイルとフォルダの変更を観察することもできます。リスト ビューで Option キーを押しながら小さな矢印をクリックすると、すべてのサブディレクトリが開き、次のようなフォルダ階層が表示されます:

さまざまな bash および zsh の代替手段をいじった後、この便利なトリックは StackExcange のコメント投稿者によって残され、最終的に最も簡単で互換性のある方法になりました。ネストされたディレクトリをフラット化するより良い方法を知っている場合は、コメントでお知らせください!

ネストされたディレクトリのフラット化 & Mac OS X のコマンドラインからのファイル階層