linux – ubuntuで入れ子になったサブディレクトリから別のフォルダにファイルを移動させるにはどうすればいいですか?(多くのサブフォルダを削除しようとしています)

file-management file-transfer linux ubuntu

ディレクトリではなくファイルを別のフォルダ/親フォルダに移動するにはどうすればいいですか?

私が持っているフォルダ構造は非常に醜く、いくつかの.mp3ファイルがサブフォルダの6レベルの深さに埋もれています

私はUbuntuを使用して、すべてのファイル(ほとんどが.mp3ですが、すべてではありません)を1つのディレクトリに、サブディレクトリが全くない状態で終了したいと思います

Help?

  45  Chris  2013-10-12


ベストアンサー

そこに偉大な答えがあります でaskubuntu-QA

そのためには、ターミナルを開いてこのコマンドを実行します

mv  -v ~/Downloads/* ~/Videos/

これは、ダウンロードフォルダからビデオフォルダにすべてのファイルとフォルダを移動します


フォルダではなく、すべてのファイルを移動するには

しかし、あなたがダウンロードフォルダからビデオフォルダにすべてのファイル(フォルダではなく)を移動することに興味がある場合は、このコマンドを使用してください

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

ダウンロードフォルダからのファイルのみを移動し、サブフォルダからは移動しないようにします

ダウンロードフォルダ内のフォルダ内のファイルではなく、ダウンロードフォルダ内のすべてのファイルを移動させたい場合は、このコマンドを使用します

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

ここでは、-maxdepthオプションでどの程度の深さまで検索するかを指定し、1は検索コマンドで指定されたディレクトリのみを検索することを意味します。2, 3 を使ってテストすることもできます

詳細な説明は、Ubuntu find manpageを参照してください

Source

54  Christian  2013-10-12


Solution

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

このコマンドは、/src/dir以下のすべての通常のファイル(すべてのサブディレクトリを含む)を探し出し、mvコマンドを使って/dst/dirに移動させます。ディレクトリを自分のものに置き換えるだけです。同じ名前のファイルは自動的に名前が変更されます

移動するファイルを選択します

MP3ファイルだけを移動させたい場合は、-type fの後にfindコマンドに-iname "*.mp3"オプションを追加してください

c0devさんの返信との比較

c0devの返信の2番目のコマンドだけが質問に答えています。以下は、このリプライと比較してどうかです。ポイント3.と4.は、ここと同じように他の返信で解決できます

  1. mvを除いて、-exec +での解決策では、xargsparallelのような追加コマンドを呼び出してファイル名を2回渡す必要はありません
  2. 他の返信は、同じ名前のファイルを静かに上書きします。ここでファイルは--backup=numberedオプションのおかげで自動的に名前が変更されます。残念ながら、~3~のようなサフィックスを持つこれらのバックアップは、デフォルトではほとんどのファイル管理で隠されています。残念ながら mv はサフィックスの変更を許可していませんが、追加コマンドで簡単に後処理することができます。これはGNUの拡張機能です
  3. -print0とは逆に、-exec command {} +はIEEE Std 1003.1 (POSIX)、ISO/IEC 9945、The Single UNIX Specification規格の一部です。したがって、より移植性が高いはずです。IEEE Std 1003.1, 2004 Edition, IEEE Std 1003.1, 2013 Edition, 0000243 を参照してください。find”に-print0を追加します。しかし、いずれにしても、mv-tスイッチはGNU拡張なので、コマンド全体がPOSIXシステム間で移植性がありません

注意: find- で始まるパスを生成できる場合 (今のところ find のそのような実装を知りません)、 {} の前にはオプション終了インジケータを付けるべきです。--

14  pabouk  2013-10-12


残念ながら、私はマークされた解決策についてコメントできるほど高い評価を得ていません。しかし、私が遭遇した問題について、他の人に注意を促したいと思いました。かなりの素人ですが、いくつかのことをやっているときには、最初は思いつかないかもしれません。願わくば、他の人の参考になれば幸いです

Problem

コマンドを開始した後、以下のメッセージのバリエーションが提供されました。その後、コマンドは複数のファイルを作成します

mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file

Cause

/src/dstの親(例: /src/../dst/)です

Solution

もっと良い解決策があるかもしれませんが、私は単にファイルを/srcの外側の一時ディレクトリに移動させてから、/src/../dstのディレクトリに戻すコマンドを再実行しました

3  MackAltman  2015-07-16


ターミナルを開いて、ファイルのあるフォルダに cd し、find . -mindepth 2 -type f -print -exec mv {} . \;を実行して、これらのサブディレクトリから現在のものにすべてのファイルを移動します

3  lion  2019-01-28


私のワンライナー – これはMacで動作しますが、どの*nixでも動作するはずです。サブフォルダを削除したいディレクトリから起動します

# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf

最初の部分では、すべてのサブフォルダからコマンドを実行した場所から実際のフォルダに移動します

2  X-File  2018-10-07


タイトルとURLをコピーしました