回答:
「myfolder」という名前のフォルダーで、ファイル階層の1レベル上(目的のポイント)にあるコマンドは次のようになります。
mv myfolder/* .
そのため、たとえばデータが入っていた場合は、コマンド/home/myuser/myfolder
を/home/myuser/
実行します。
.*
。元のフォルダを削除するのは簡単であり、要求されないので、OPにそのフォルダを処理させます。
*
と.*
1行で記述できますか?ちょうど好奇心
mv
はすべて、移動のターゲットにする必要があるLAST引数を除くすべてのソースになります(複数のソースの場合はフォルダーにする必要があります)。
/bin/mv: Argument list too long
上記のRuduの回答とコメントから抜粋して、明確にするためです。
すべてのコンテンツを移動する必要がある場合は、で始まるファイルを含めます。(.htaccess、.gitなど)、*と。*の両方をコマンドに含める必要があります。そのようです:
mv subfolder/* subfolder/.* .
これにより、サブフォルダーの内容が現在のフォルダーに移動します。最後の「。」の前のスペースに注意してください。
mv: rename fake/. to ./.: Invalid argument
してmv: rename fake/.. to ./..: Invalid argument
これは、次の方法で可能です。
を使用してrsync
:
rsync -vua --delete-after foo/ .
cp
and を使用rmdir
:
cp -vaR foo/. . && rmdir foo/
使用mv
(dotglob
オプションを有効にした場合):
shopt -s dotglob # Includes filenames beginning with a dot.
mv -- foo/* . # Where foo/ is the folder consisting the files.
shopt -u dotglob # Disables previously enabled dotglob option.
foo/
コンテンツを1レベル上に移動するフォルダーがあります。
help shopt
およびを参照してくださいman bash
。
mv foo/* foo/.[^.]* . && rmdir foo/
注:というファイルが欠落しますfoo/..bar..
。
注:POSIXシェルの場合、必要[!.]
です。
-v
、-u
、-a
と-r
やって?AFAICT -v
は冗長であり、rsyncにより多くの情報を出力させるだけです。-u
更新を意味します-ファイルが新しい場合にのみコピーします。それは関係がないようです。-a
アーカイブを意味します。これにより、ファイルの所有者と権限がコピーされ、同期が再帰的になります。-r
は再帰を意味しますが、それはすでにでカバーされてい-a
ます。
-u
既に存在するデータの移動に余分な時間を費やしたくない場合に便利です(特に低速のストレージデバイスの場合)。あなたが言ったように-r
それがカバーさ-a
れているので、私は削除しました。
mv foo/* foo/.[^.]* .
foo/..bar..
インスタンスと呼ばれるファイルを見逃すでしょう。POSIXシェルには、が必要であることに注意してください[!.]
。
rsync -vua --delete-after foo/ .
現在のディレクトリにすでに存在する可能性のある他のすべてを削除することに注意してください。
共有サーバーを使用している人は、このようなものを使用する必要があります
ファイルを移動するには
mv -v ~/public_html/public_html/* ~/public_html/
ファイルをコピーするには
cp -a ~/public_html/public_html/* ~/public_html/
.*
だけで*
なく、一致する必要があるかもしれません。また、最後に `&& rmdir myfolder`を追加して、今では無関係なフォルダーを削除します。これは、mvが成功を返した場合にのみ実行され、rmdirは空でないディレクトリを削除しないため、保存されます。