ディレクトリ名を「fname[mname]lname」から「lname, fname[mname]」に変更します。

ディレクトリ名を「fname[mname]lname」から「lname, fname[mname]」に変更します。

著者名が「first [mi] last」(中間イニシャル/名前は複数である場合がある)のディレクトリが複数あり、これを「last, first mi」に変更したいと思います。だから、名前を複数のトークンに解析し、トークンを並べ替える方法が欲しいです。

ではawk次のようになります。

ls | awk print '$NF", "  $1,$2 ...'   

答え1

これは機能しなければならず、シェルに依存しません。単一の引数(たとえば、デフォルトディレクトリ)を使用してスクリプトとして実行します。

  1. find指定されたデフォルトディレクトリのすぐ下にあり、変換されたディレクトリを除いて、1行に1つのディレクトリ名を取得するために使用されます。

  2. awkリストからデフォルトディレクトリを削除し、各行で変更したい直接ディレクトリの名前のみを残すために使用されます。 (awkここでは、/をフィールド区切り文字として使用し、各行の最後のフィールドを印刷します。)

  3. awk2番目の印刷コマンドを使用して、mv要求どおりに各ディレクトリの名前を変更します。 (awkここでは、デフォルトのスペースはフィールド区切り文字として使用されます。)

  4. 出力をファイルに保存し、適切に見える場合に実行します。

#!/bin/sh
find "$1" -mindepth 1 -maxdepth 1 -type d -not -name "*,*"|\
awk -F/ '{print $NF}'|\
awk -v DIR="$1" '{printf "mv \"" DIR "/" $0 "\" \"" DIR "/" $NF", "; for (i=1; i<NF; i++) {printf $i" "}; printf "\"\n"}'

関連情報