フォルダーのコンテンツを1レベル上に移動する


127

展開されたディレクトリがありますが、フォルダ内にあります。コンテンツを1レベル上に移動するにはどうすればよいですか?SSH経由でCentOSにアクセスしています。

回答:


189

「myfolder」という名前のフォルダーで、ファイル階層の1レベル上(目的のポイント)にあるコマンドは次のようになります。

mv myfolder/* .

そのため、たとえばデータが入っていた場合は、コマンド/home/myuser/myfolder/home/myuser/実行します。


35
アーカイブにドットファイルが含まれている場合.*だけで*なく、一致する必要があるかもしれません。また、最後に `&& rmdir myfolder`を追加して、今では無関係なフォルダーを削除します。これは、mvが成功を返した場合にのみ実行され、rmdirは空でないディレクトリを削除しないため、保存されます。
カレブ

の良い点.*。元のフォルダを削除するのは簡単であり、要求されないので、OPにそのフォルダを処理させます。
ルドゥー

1
@Calebは、両方*.*1行で記述できますか?ちょうど好奇心
リチャード

2
@リチャードはい、そうです。の引数mvはすべて、移動のターゲットにする必要があるLAST引数を除くすべてのソースになります(複数のソースの場合はフォルダーにする必要があります)。
カレブ

1
私はbashを取得しています:/bin/mv: Argument list too long
dragosrsupercool 14年

26

上記のRuduの回答とコメントから抜粋して、明確にするためです。

すべてのコンテンツを移動する必要がある場合は、で始まるファイルを含めます。(.htaccess、.gitなど)、*と。*の両方をコマンドに含める必要があります。そのようです:

 mv subfolder/* subfolder/.* .

これにより、サブフォルダーの内容が現在のフォルダーに移動します。最後の「。」の前のスペースに注意してください。


それは動作しますが、私は取得mv: rename fake/. to ./.: Invalid argumentしてmv: rename fake/.. to ./..: Invalid argument
マズロー

16

これは、次の方法で可能です。

  • を使用してrsync

    rsync -vua --delete-after foo/ .
  • cpand を使用rmdir

    cp -vaR foo/. . && rmdir foo/
  • 使用mvdotglobオプションを有効にした場合):

    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ここで提案されているように):

    mv foo/* foo/.[^.]* . && rmdir foo/

    注:というファイルが欠落しますfoo/..bar..

    注:POSIXシェルの場合、必要[!.]です。


rsyncのスイッチは何をしている-v-u-a-rやって?AFAICT -vは冗長であり、rsyncにより多くの情報を出力させるだけです。-u更新を意味します-ファイルが新しい場合にのみコピーします。それは関係がないようです。-aアーカイブを意味します。これにより、ファイルの所有者と権限がコピーされ、同期が再帰的になります。-rは再帰を意味しますが、それはすでにでカバーされてい-aます。
rjmunro

-u既に存在するデータの移動に余分な時間を費やしたくない場合に便利です(特に低速のストレージデバイスの場合)。あなたが言ったように-rそれがカバーさ-aれているので、私は削除しました。
ケノーブ

1
mv foo/* foo/.[^.]* .foo/..bar..インスタンスと呼ばれるファイルを見逃すでしょう。POSIXシェルには、が必要であることに注意してください[!.]
ステファンシャゼル

rsync -vua --delete-after foo/ .現在のディレクトリにすでに存在する可能性のある他のすべてを削除することに注意してください。
デビッド

7

mvコマンドを発行するだけです

mv (directory)/* .

ディレクトリを削除する場合は、追加します

rm -rf (directory)

あなたが(ディレクトリ)の親ディレクトリにいると仮定します

(ディレクトリ)内にいる場合

mv * ../

13
追加の安全性のヒント:空であることがわかっているディレクトリを削除するrmdir場合、ディレクトリ空でない場合は文句を言い、終了しますが、rm -r代わりにディレクトリそのすべてのコンテンツを削除します。(それはポカヨークです。)
アンコ

素晴らしい点!そうしない理由は考えられません。
マークララー

@MarkLalor理由の1つ.DS_storeは、macOS のいたるところにあるような隠しファイルの存在です。上記のmvコマンドはそれらを(dotglobセットなしで)移動しません。
AkselA

0

共有サーバーを使用している人は、このようなものを使用する必要があります

ファイルを移動するには

mv -v ~/public_html/public_html/* ~/public_html/

ファイルをコピーするには

cp -a ~/public_html/public_html/* ~/public_html/


2
上記の質問は、コンテンツのコピーではなく移動について尋ねています。これは、オリジナルをサブフォルダーに残すことでファイルを複製します。また、「共有」サーバーであるかどうかは、実際にはこれとは関係ありません。
カレブ

1
ここにあなたの権利とは...それのための答えである
リカルド・ハボック

2
あなたの編集について:すでに支持されている答えとはどう違うのですか?そして、「共有サーバー」はそれと何の関係があるのでしょうか?これが既にここにあるものに価値を追加する有用な貢献になる場合、これらの項目を説明するために編集してください。
カレブ

1
私は、共有サーバーがそれとは何の関係もないことに同意しません。「DIR」が入力されている方法は、違いの世界を作る...
リカルド・ハボック

1
なんでそんなに怒ってるの?私たちは皆異なって理解し、さまざまな技術的問題に異なって直面しています...良い一日をお過ごしくださいカレブ..
リカルドハボック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.