Kod golf oynadı, ancak yalnızca iki komut ve iki normal ifade ile okunabilir:
mkdir -p '#' {a..z}
prename -n 's|^[[:alpha:]]|\l$&/$&|; s|^[0-9]|#/$&|' [[:alnum:]]?*
Taşınacak çok fazla dosyanız varsa, işlem bağımsız değişken listesine sığmayacak kadar çok dosyanız varsa (evet, bir sınır vardır ve bu yalnızca birkaç kilobayt olabilir), farklı bir komutla dosya listesini oluşturabilir ve prename, Örneğin:
find -mindepth 1 -maxdepth 1 -name '[[:alnum:]]?*' -printf '%f\n' |
prename -n 's|^[[:alpha:]]|\l$&/$&|; s|^[0-9]|#/$&|'
Bu, [[:alnum:]]?*glob deseniyle eşleşen dosya yoksa , gerçek dosya adını taşımaya çalışmama avantajına sahiptir . findayrıca kabuk küreciliğinden çok daha fazla eşleşme ölçütüne izin verir. Alternatif olarak, nullglobkabuk seçeneğini ayarlamak ve standart giriş akışını kapatmaktır prename. 1
Her iki durumda -nda dosyaları gerçekten taşımak için anahtarı kaldırın ve sadece nasıl taşınacaklarını göstermeyin.
Zeyilname: Boş dizinleri yeniden silebilirsiniz:
rmdir --ignore-fail-on-non-empty '#' {a..z}
1 shopt -s nullglob; prename ... <&-