Flatten Foldersコマンドを使用して重複ファイルの名前を変更する

Flatten Foldersコマンドを使用して重複ファイルの名前を変更する

このコマンドは、1つ以上のフォルダの内容を親フォルダに移動します。ただし、同じ名前、同じ拡張子を持つファイルがあると、移動中に上書きされるファイルがあります。

find . - mindepth 2 -type f -exec mv "{}" . \; && fin d . - type d -empty -delete

重複したファイル名を持つファイルを上書きせずに(1)、(2)、(3)などを追加するようにこのコマンドを変更するにはどうすればよいですか?

答え1

numbered次のオプションがありますmv

  numbered, t
  make numbered backups

見てMV マニュアルページ

これをパッドの1つに統合できます。

答え2

このスクリプトをすべてのファイルを保存する最上位ディレクトリにコピーし、実行可能にしてから実行します。

#!/bin/bash

## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1

## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
    mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)

## Checking which files need to be renamed
while [[ $list != '' ]] ; do
   ##Remaming the un-moved files to unique names and move the renamed files
   find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
       current_file=$(basename $file)
       mv -n $file "./${nr}${current_file}"
   done
   ## Incrementing counter to prefix to file name
   nr=$((nr+1))
   list=$(find . -mindepth 2 -type f -print)
done

関連情報