現在の問題

現在の問題

次のフォルダ構造があります。

foo
`----> bar

barコンテンツを抽出する方法はfoo

mv -f bar/* .内部で試してみましたfoo

-f、--force上書きする前に尋ねない|

ところで、「ディレクトリが空でないため移動できません」というメッセージbar/ajaxが表示されます。foo/ajax

この問題をどのように解決できますか?

答え1

mvファイルは上書きされますが、上書きは拒否されます。目次。ディレクトリをマージしてソースディレクトリを削除するコマンドはありません(おそらくあなたが望むものでしょうmv)。rsync --remove-source-files空のディレクトリが残ることもあります。

次のコマンドの組み合わせを使用できます。

cp -a dev/. .
rm -r dev

devすべてを現在のディレクトリにコピーしてからdevディレクトリを削除します。

または:

rsync -a --remove-source-files dev/ .
find dev -depth -type d -exec rmdir {} \;

rsyncすべてのファイルを移動し、残りの空のディレクトリを削除するために使用されます。

答え2

現在の問題

foo/bar/コンテンツを最大に移動しようとしていますfoo/

参考にしますスーパーユーザーに関するこの記事またこの記事はサーバーエラーから来ています。ソリューションから。

解決策

ユーザーStephan202によると、これを行うには、次のコマンドを探しています。

cd /path/to/foo/bar
mv * .[^.]* ..

foo/bar/内部で次のコマンドを実行することもできます。

(shopt -s dotglob; mv -- * ..)

正しい権限があることも確認してください。必要に応じて、root権限でコマンドを実行します。

結論として

この回答について質問や質問がある場合は、コメントを残してください。コマンドを試す前に、私が提供する各リンクを注意深く読んでください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。

頑張ってください!

答え3

編集する:長所と短所を示すためにこの回答を修正しました。

一部のマニュアルページでは、その情報マニュアルに情報が記載されているため、非常に簡潔です。

男性

-f, --force

       上書きする前にメッセージが表示されない

情報

        メモ: mv交換のみ空のディレクトリ目的地へ。診断では、競合する人口ディレクトリをスキップします。

[...]

-F、 - 力

       ターゲットファイルが存在する場合しかし、一般的に書くことはできません、標準入力は端末であるか、オプションは-f提供されず、ユーザーにファイルを置き換えるかどうかを尋ねられます。 (ファイルを所有しているか、そのディレクトリへの書き込み権限がある可能性があります。)応答が肯定的でない場合は、ファイルをスキップしてください。--forcemv

mv空でないディレクトリは置き換えることはできませんが、ユーザーが所有する既存のファイルは上書きされ、通常は書き込まれません(所有者は書き込み権限がありません。引用を参照)。

foo    
|-- ajax
`-- bar
    `-- ajax

ディレクトリをマージしfoo/ajaxfoo/bar/ajaxすべてのファイルを保持したり、提案どおりに同じファイルを上書きしたりできます。@murulu

ただし、この方法は、そのディレクトリの内容が関連しない場合には適していません。一見すると明確ではないかもしれないので、新しいツリーを見てみましょう。

prompt% tree home/network
home/network/
├── data
│   ├── img
│   │   └── demo.png
│   └── src
│       ├── contact.pdf
│       └── report.pdf
├── hardware
│   ├── api
│   ├── docs
│   └── src
│       └── driver.c
├── misc
│   └── src
│       └── init.py
├── README
└── src
    ├── main.c
    └── manager.c

コンテンツを同じ名前のディレクトリに移動しnetwork/dataて選択的にマージできます(下記参照)。network

prompt% cp -ab home/network/data/* home/network
prompt% rm -r home/network/data/*
prompt% tree home/network
home/network/
├── data
├── hardware
│   ├── api
│   ├── docs
│   └── src
│       └── driver.c
├── img
│   └── demo.png
├── misc
│   └── src
│       └── init.py
├── README
└── src
    ├── contact.pdf
    ├── main.c
    ├── manager.c
    └── report.pdf

network/src移動後、最後のディレクトリに無関係なファイルを含めることができることがわかります。不要な場合は、移動後に同じ名前でファイルとディレクトリの名前を変更できます。

prompt% mv -b -S "_data" home/network/data/* home/network
prompt% tree home/network
home/network/
|-- README
|-- data
|-- hardware
|   |-- api
|   |-- docs
|   `-- src
|       `-- driver.c
|-- lib
|   `-- demo.png
|-- misc
|   `-- src
|       `-- init.py
|-- src
|   |-- contact.pdf
|   `-- report.pdf
`-- src_data
    |-- main.c
    `-- manager.c

答え4

移動コマンドを使用できます。

cd foo
mv bar/* .

Jeff Schallerが提案したように

 shopt -s dotglob 

mv コマンドの前に隠しファイルを移動します。-i上書きする前に対話形式で確認するには、mvオプションを使用します。

関連情報