web-dev-qa-db-ja.com

ファイルとフォルダーをサブフォルダーに移動する

すべてのファイルとフォルダを1つのディレクトリからそのサブフォルダの1つに移動したいと思います。それ、どうやったら出来るの?

BusyBoxとLinuxを使用しています。

例:

/my/path/内のすべてのファイルとフォルダーを/my/path/subfolder/.に移動します

ソリューションをコピーしてから削除するのは手頃な価格ではありません。

ありがとう。

1
hebbo

さらに掘り下げて実験した後。私は答えを見つけました:-Pruneは、サブディレクトリへの拒否を回避するために使用されます。 ! -nameはターゲットサブディレクトリを除外するために使用され、次にexecは移動操作を実行します。 {}は、findコマンドのファイル/ディレクトリ名に置き換えられます。

find /my/path/* -Prune ! -name subfolder -exec mv {} /my/path/subfolder/. +
0
hebbo
mv * subfolder 

もちろん、「サブフォルダ」ディレクトリをそれ自体に移動することはできませんが、他のすべては移動します

2
Gman Smith

*(Shellによって拡張)を使用するソリューションは、/my/path/内のオブジェクトが多すぎると機能しません。そのような場合、次のようになります。

argument list too long

このアプローチは*を使用しません:

cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +

残念ながら、find-mindepthおよび-maxdepthオプションはPOSIXに準拠していません。 mv-tオプションもそうではないと思います。

このバリアントはPOSIXを満たす必要があります。

cd /my/path/ &&
find . ! -name . -Prune ! -name subfolder -exec mv {} subfolder/ \;

(私は適応しました このUnixとLinux SEの答え )。悲しいことに、見つかったすべてのオブジェクトに対してmvを呼び出すため、処理が遅くなります。


ディレクトリを新たに作成できる場合のみ(最初は/my/path/subfolder//my/subfolder/も存在しないはずです)の高速な代替アプローチ:

  • path/の名前をsubfolder/に変更します。
  • path/を再作成します、
  • subfolder/path/に移動します。

Iノードベースのファイルシステムでは、path/にオブジェクトがいくつあっても、これは同じくらい高速である必要があることに注意してください。コード:

cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/

この場合、私は&&を頻繁に使用して、手順のいずれかが失敗した場合に手順を中止する必要があることを強調しました。ただし、デフォルト以外の権限や所有権などを取得するためにpath/またはsubfolder/が必要な場合、このアプローチは不便です。

2

mvコマンドを確認することをお勧めします。ディレクトリ内のすべてのファイルとフォルダを検索してサブディレクトリを除外し、findコマンドでmvを使用して、見つかったすべてのファイルとフォルダをそのサブディレクトリにコピーすることができます。

同様のスタックオーバーフローの質問を参照してください https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory

0
CheesyMacHack

これを行う最も簡単な方法は次のとおりです。

mv !(subfolder) subfolder

「!」プログラミング言語と同様に、mvがサブフォルダーを除くすべてのファイルとフォルダーを必要なサブフォルダーに移動するNOTを意味します。

非表示フォルダーやドットフォルダーの移動などの追加事項については、こちらで説明しています: https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder ==

0