2

すべての Unicode ファイル名を ASCII に変更しようとしています。

私はこのようなことをしたかった:

for file in `ls | egrep -v ^[a-z0-9\._-]+$`; do mv "$file" $(echo "$file" | slugify); done

しかし、まだ機能しません。

  • まず、正規表現^[a-z0-9\._-]+$では十分ではないようです。
  • 次に、slugify はファイルの拡張子も変換するため、最初に拡張子を切り取り、元に戻す必要があります。

それを行う方法のアイデアはありますか?

4

1 に答える 1

4

まず最初に、の出力を解析しないでくださいls。これは一般に、特に名前に奇妙な文字が含まれているファイルを期待している場合は、悪い考えです。

slugify一般的にファイル名で必要なことを行うと仮定して、試してください:

for file in * ; do
  if [ -f "$file" ] ; then
    ext=${file##*.}
    name=${file%.*}
    new_name=$(echo "$name"|slugify)
    if [[ $name != $new_name ]] ; then
      echo mv -v "$name.$ext" "$new_name.$ext"
    fi
  fi
done

警告: 拡張子のないファイルがある場合、これは失敗します (ファイル名が 2 倍になります)。それを処理する必要がある場合は、ドクター Jによるこの他の回答を参照してください。

于 2012-09-03T19:08:33.350 に答える