すべてのファイルとフォルダを 1 つのディレクトリからそのサブフォルダの 1 つに移動したいのですが、どうすればよいですか?
BusyBox と Linux を使用しています。
元:
すべてのファイルとフォルダ/my/path/
を移動する/my/path/subfolder/.
コピーして削除するソリューションは手頃な価格ではありません。
ありがとう。
答え1
mv * subfolder
もちろん、「サブフォルダ」ディレクトリをそれ自体に移動することは失敗しますが、他のすべては移動します
答え2
(シェルによって展開される)を使用するソリューションは、*
内のオブジェクトが多すぎると機能しません/my/path/
。そのような場合は、次のようになります。
argument list too long
このアプローチでは以下は使用しません*
:
cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +
残念ながら-mindepth
、-maxdepth
と のオプションはfind
POSIX に準拠していません。また、-t
のどちらのオプションも準拠mv
していないと思います。
このバリアントは 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/
。
inode ベースのファイルシステムでは、オブジェクトの数に関係なく、同様に高速になることに注意してくださいpath/
。コード:
cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/
この場合、いずれかのステップが失敗した場合は手順を中止する必要があることを強調するために lot を使用しました。ただし、デフォルト以外の権限、所有権などが必要な&&
場合、このアプローチは不便です。path/
subfolder/
答え3
これを行う最も簡単な方法は次のとおりです。
mv !(subfolder) subfolder
「!」はプログラミング言語と同様に NOT を意味し、mv はサブフォルダーを除くすべてのファイルとフォルダーを必要なサブフォルダーに移動します。
隠しフォルダーやドット フォルダーの移動などの追加事項については、ここで説明します。https://askubuntu.com/questions/91740/現在のフォルダー内のすべてのファイルをサブフォルダーに移動する方法
答え4
コマンドを試してみるとよいでしょうmv
。ディレクトリ内のすべてのファイルとフォルダを検索し、サブディレクトリを除外してから、コマンドを使用して見つかったものすべてをそのサブディレクトリにコピーすることができfind
ますmv
。
同様のスタックオーバーフローの質問を見るhttps://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory