
メール アカウントを含むフォルダーがありAccounts
、これらのフォルダーすべてにフォルダーがありますArchive.folder
。簡単なスクリプトを使用して、すべてのアーカイブ フォルダーを新しいフォルダーに移動したいと考えています。
これまで試したことは次のとおりです:
find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} +
しかし、これは archive というフォルダーだけではなく、すべてのフォルダーを移動します。現在の archive というフォルダー内のすべてのフォルダーを見つけて、testnew/ フォルダーに移動したいのです。移動したフォルダーへのパスは以前と同じである必要があります。
現状:
Accounts
- 1
- archive
- inbox
- folder2
- 2
- archive
- inbox
- folder2
- 3
- archive
- inbox
- folder2
次のようになります:
testnew
- 1
- archive
- 2
- archive
- 3
- archive
答え1
これを対話的に行うことが問題なければ、vidir
良い方法かもしれません。この答え。
あなたの場合、手順は次のようになります:
cd /path/to/Accounts find . -type d -name archive | vidir -
vidir
テキストエディタを起動します。「検索と置換」を使用して、先頭のパスをすべて./
任意のパスに置き換えて、行が目的のディレクトリ構造に一致するようにします。パスは絶対パスでも相対パスでもかまいません../
。たとえば、これを簡単に変更することができます。./1/archive ./2/archive ./3/archive
この中に
../testnew/1/archive ../testnew/2/archive ../testnew/3/archive
編集したファイルを保存し、エディターを終了します。
ノート:
- ディレクトリ構造に で終わる名前のディレクトリが含まれている場合
.
(つまり、./
部分文字列が先頭だけでなく先頭にも表示される場合)、<TAB>./
を に置き換える方が適切です。<TAB>whatever/path/you/want/
ここで は<TAB>
タブ文字を示します。この文字を「検索と置換」に含めることができるかどうか、また含める方法かどうかは、エディターによって異なります。 - を指定してエディターを選択します
EDITOR
(例: )find … | EDITOR=kate vidir -
。 vidir
ファイルシステム間でファイルを移動することはできません。すべてのarchive
ディレクトリが 1 つのファイルシステムに属していて、testnew
別のファイルシステムに移動したい場合は、testnew
ソース ファイルシステムで作成し、使用してvidir
、最後にtestnew
ターゲット ファイルシステムに移動します。- の終わりにこれは別の答えです非インタラクティブ
EDITOR
にするために悪用される実験的なアプローチがあります。しかしvidir
vidir
あなたのようなケースでは、名前の変更や移動を行う前に、結果のパスが本当に希望どおりのものかどうかを確認できるため、これが役立つと思います。何かを間違えた場合は、変更を保存せずに中止できます。問題に対する非対話型の解決策が必要な場合、これはvidir
最適なツールではありません。