ディレクトリではなくファイルを別のフォルダ/親フォルダに移動するにはどうすればいいですか?
私が持っているフォルダ構造は非常に醜く、いくつかの.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を参照してください
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.は、ここと同じように他の返信で解決できます
mv
を除いて、-exec +
での解決策では、xargs
やparallel
のような追加コマンドを呼び出してファイル名を2回渡す必要はありません- 他の返信は、同じ名前のファイルを静かに上書きします。ここでファイルは
--backup=numbered
オプションのおかげで自動的に名前が変更されます。残念ながら、~3~
のようなサフィックスを持つこれらのバックアップは、デフォルトではほとんどのファイル管理で隠されています。残念ながらmv
はサフィックスの変更を許可していませんが、追加コマンドで簡単に後処理することができます。これはGNUの拡張機能です -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