すべてのサブディレクトリの内容をそのサブディレクトリに移動します。

すべてのサブディレクトリの内容をそのサブディレクトリに移動します。

私が直面している問題は、何千ものサブディレクトリがあるディレクトリがあり、各サブディレクトリにはより多くのサブディレクトリが含まれており、すべてのサブディレクトリには内部にイメージがあることです。

私は何千ものを持っています:

/1056/7624/image.png

基本的にここから7624ディレクトリを削除して、次のような何千ものディレクトリを作成したいと思います。

/1056/image.png

試してみましたが、mv */*/* */*本当に驚きました。ターミナルコマンドを使用してこれを実行できますか?

私は50の画像を取得するために50のディレクトリに入る必要なく、このマルチファイルアップローダを使用できるようにしようとしています。

答え1

for dir in */*; do
  if [[ -d "$dir" ]]; then
    ( 
      cd "$dir"
      mv -n * ..
      cd ..
      rmdir "$( basename "$dir" )"
    )
  fi
done

重複したファイルまたはサブディレクトリ名はいいえ移動したので、このような場合、ディープディレクトリはいいえまだファイルが含まれているため削除されました。

答え2

これにより、現在のディレクトリとサブディレクトリのすべてのファイルが現在のレベルに移動されます。数字が追加され、同じ名前のファイルの名前が変更されます。

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

それからあなたはすべてを得ることができることを確認できます

find ./ -mindepth 2 -type f

関連情報