ネストされたサブディレクトリからUbuntuの別のフォルダにファイルを移動するにはどうすればよいですか?(多くのサブフォルダーを削除しようとしています)


36

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

私は非常にlyいフォルダー構造を持ち、いくつかの.mp3ファイルがサブフォルダーの6レベルの深さに埋まっています。

Ubuntuを使用して、すべてのファイル(ほとんどは.mp3ですが、すべてではありません)を1つのディレクトリに配置し、サブディレクトリはまったく使用しません。

助けて?

回答:


48

askubuntu-QAにはすばらしい答えがあります。

これを行うには、ターミナルを開き、次のコマンドを実行します。

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

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


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

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

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

サブフォルダーからではなく、ダウンロードフォルダーからのみファイルを移動するには:

Downloadsフォルダーからすべてのファイルを移動し、Downloadフォルダー内のフォルダー内のファイルは移動しない場合は、次のコマンドを使用します。

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

ここで、-maxdepthoption 1は、findコマンドで指定されたディレクトリのみを検索する方法を 指定します。あなたは使用して試すことができ23また、テストに。

詳細な説明については、Ubuntu findのマンページを参照してください。

ソース


私がやりたいことがすべてのファイルをフォルダにコピーする場合、mvをcpに変更するだけですか?私はLinuxが
初めてです-Neoryder

13

溶液

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

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

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

MP3ファイルのみを移動する-iname "*.mp3"場合は、findコマンドの後にオプションを追加します-type f

c0devによる応答との比較

c0devの応答の2番目のコマンドのみが質問に回答します。以下は、この返信との比較です。ポイント3と4は、ここと同じ方法で他の返信で解決できます。

  1. を除くmvソリューションは、またはの-exec +ような追加のコマンドを呼び出して、ファイル名を2回渡す必要はありません。xargsparallel
  2. もう1つの応答は、同じ名前のファイルを静かに上書きします。ここでは、オプションによりファイルの名前が自動的に変更されます--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年版および0000243: "検索"に-print0を追加します。しかし、とにかく必要な-t切り替えmvはGNU拡張であるため、POSIXシステム間でコマンド全体を移植することはできません。

注:この場合find-find現時点ではそのような実装はわかりません)で始まるパスを生成でき{}ます--。オプションの最後のインジケーターを前に付ける必要があります。


エラー:検索: `-exec 'の引数がありません
クリス

@クリス:あなたは正しい、それ{}は最後の引数としてでなければならないようです。修正しました。
パブーク

@クリス:それはあなたが望むように今動作しますか?「はい」の場合、おそらく答えを受け入れることができるので、質問は「未解決」として表示されません。
パブーク

これは私が実行しているもので、ディレクトリが見つかりませんというエラーが表示されます:
Chris

私が実行しているもの:clstal @ clap:〜$ ls 1st script.R Firefox_wallpaper.png part1vidproj zotero pdf manager Desktop mozilla.pdf Pictures Documents parent Videos clstal @ clap:〜$ find / source / directory -type f -exec mv -t / destination / directory {} + find: `/ source / directory ':そのようなファイルまたはディレクトリはありません
Chris

2

残念ながら、マークされた解決策についてコメントするほどの評判はありません。しかし、私が遭遇した問題について他の人に警告したかったのです。かなりアマチュアです。ただし、いくつかのことをしているとき、最初は思い浮かばないかもしれません。うまくいけば、他の人の助けになるでしょう。

問題

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

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

原因

/src親である/dst(例えば/src/../dst/)。

溶液

より良い解決策があるかもしれませんが、ファイルを自分の外部の一時ディレクトリに/src移動し、コマンドを再実行して、目的の/src/../dstディレクトリに戻しました。


2

私のワンライナー-これは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番目の部分では、サブディレクトリが空であるかどうかを確認し(これで:-)、サブディレクトリを削除して、サブディレクトリなしですべてを取得できるようにします。


(1)あなたの答えが何をするのか、そしてそれが他の答え(どれも非常に似ている)に対して持っている利点を説明してください。コメントで返信しないでください。 回答を編集して、より明確で完全なものにします。(2)-not演算子は非標準であるため、コマンドは他のものより移植性が低いことに注意してください。
スコット

見つける。-not -type d -print0 | xargs -0J%mv -f%。; 見つける。-type d -depth -print0 | xargs -0 rm -rfフォルダー内でこのコマンドを実行すると、サブフォルダー、つまり現在のフォルダーが削除され、親フォルダーに移動しました。幸いなことに、ファイルマネージャーを監視していて、コマンドを停止することができ、テストフォルダーで実行されました。
ウィル

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.