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