web-dev-qa-db-ja.com

mv:ディレクトリを非ディレクトリで上書きできません

この問題を回避することは可能ですか?

一部のファイルを下の1つのディレクトリに移動する必要がある状況があります。

/a/b/c/d/e/f/g

問題は、g/ディレクトリはディレクトリ名と同じです

そして私は次のエラーを受け取ります:

mv: cannot overwrite directory `../297534' with non-directory

例:/home/user/data/doc/version/3766/297534はディレクトリで、中には297534という名前のファイルもあります

このファイルを/ home/user/data/doc/version/3766内に移動する必要があります

コマンドこれは私が実行しているものです:(forループで)

cd /home/user/data/doc/version/3766/297534
mv * ../
16
anarchist

Mvに、同じ名前のファイルでディレクトリを上書きさせることはできません。 mvコマンドを使用する前に、そのファイルを削除する必要があります。

14
lreeder

ループにレイヤーをもう1つ追加します。

mv * ../

for f in `ls`; do rm -rf ../$f; mv $f ..; done

これにより、上書きするディレクトリを気にしないと想定して、競合が最初に確実に削除されます。

現在のディレクトリの名前と一致するファイルが現在のディレクトリ内にある場合は、このwillが爆発することに注意してください。たとえば、あなたが/home/user/data/doc/version/3766/297534にいて、297534というディレクトリを上に移動しようとしているとします。これに対する1つの回避策は、すべてのファイルに長いサフィックスを追加することです。そのため、一致する可能性はほとんどありません。

for f in `ls`; do mv $f ../${f}_abcdefg; done
0
merlin2011