移動コマンドは、サブフォルダ内のすべてのファイルを親ディレクトリに移動し、同じ名前のファイルがある場合は名前を変更します。

移動コマンドは、サブフォルダ内のすべてのファイルを親ディレクトリに移動し、同じ名前のファイルがある場合は名前を変更します。

だから私はUbuntuコンピュータに77のサブフォルダがあるディレクトリを持っています。各フォルダにはさまざまなトレントファイルが含まれています。サブフォルダには合計427の急流が含まれています。サブフォルダから親ディレクトリにすべて移動したいです。

ゲインは何ですか?一部のファイルの名前はまったく同じです。移動後に名前がどのように変更されたかは重要ではありませんが、これを修正する最も簡単な方法は、abc.torrent ---> abc1.torrent、abc2.torrentなど(多くの場合)です。

すべてのファイルを親ディレクトリに抽出する次のコードが見つかりました。

find . -mindepth 2 -type f -print -exec mv {} . \;

--backupを使用して同じ名前のファイルを回復できることを知っています。だから私はコードに以下を追加しました。

find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;

ところで実行してみると427個ではなく167個のファイルだけ移動するようになりました。

また、-iを使用して各質問を個別に尋ねることができることも知っていますが、時間はかなりかかります。これを自動化する方法はありますか?

答え1

私が理解したところによると、2番目の発見はうまくいくでしょう。この発見をパイプすると、wc -l期待どおりに427が返されますか?

同じことを行う高速bashスクリプトは次のとおりです。

#!/bin/bash

for torrent in $(find /path/to/target/dir -mindepth 2 -type f); do
    count=0
    # get filename and remove any spaces
    filename=$(echo $torrent | tr -d ' ' | awk -F '/' '{print $NF}')
    # if it exists in the current dir, name it $count-$filename
    while [ -f /path/to/target/dir/$filename ]; do
        ((count++))
        filename=$count-$filename
    done
    # do the move
    mv "$torrent" /path/to/target/dir/$filename
done

関連情報