特定の深さで特定のディレクトリを移動する

特定の深さで特定のディレクトリを移動する

フォルダ内の特定のサブフォルダを移動するのに役立つbashスクリプトを作成しようとしています。
問題は、デフォルトフォルダに、、、、、、、、、のphotosような名前のフォルダがあることです。ここでフォルダ名が繰り返され、同じフォルダ構造が再度繰り返される。移動したいサブフォルダは、名前に文字が含まれる最後のフォルダにあります。移動するサブフォルダの名前には、2文字以上の文字が含まれています。フォルダ構造は、///subdirターゲットフォルダが指定されていないためです。12345678900-90-90-9desktop/photos1

例:photos/0/0/0/23345 photos/1/9/0/12578

たとえば、2つのサブディレクトリの名前が同じ場合は、photos/0/0/0/23345そのphotos/1/1/1/23345うちの1つの名前を変更したいと思います。私はOSXを使用しています

ベストアンサー1

  • GNU coreutilsがあるシステム(したがってOSXのデフォルトインストールではない)では、次のものを使用できます。

    mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/
    

    これが動くでしょうみんなphotos/深さ1、2、3のディレクトリ名に関係なく、深さ4のサブディレクトリを削除します。

    このアプローチの利点は、必要なときにのみ名前を変更することです(12578たとえば、inにサブフォルダが1つしかない場合はphotos/1/9/0/名前は変更されません)。

  • GNU coreutilsがない場合は、すべてのサブフォルダの名前を変更するこの(やや複雑な)スクリプトを使用できます。たとえば、次のようphotos/1/9/0/12578に名前が変更されます12578-190

    target=/some/path
    for i in {0..9}; do
      for j in {0..9}; do
        for k in {0..9}; do
          for dir in "photos/$i/$j/$k/*/"; do
            mv -- "$dir" "$target/$(basename $dir)-$i$j$k"
          done
        done
      done
    done
    

おすすめ記事