コンテンツに応じて複数のファイルの名前を変更する

コンテンツに応じて複数のファイルの名前を変更する

コンテンツの最初の単語を使用してフォルダ内のすべてのファイル名を変更するには?たとえば、a.txtの最初の行に「UnixはOSです」が含まれている場合は、a.txtの名前をUnix.txtに変更する必要があります。

ベストアンサー1

この試み:

for f in *.txt; do d="$(head -1 "$f" | awk '{print $1}').txt"; if [ ! -f "$d" ]; then mv "$f" "$d"; else echo "File '$d' already exists! Skiped '$f'"; fi; done

またはより長い変形(スクリプトとして):

#!/bin/sh
for f in *.txt; do
    d="$(head -1 "$f" | awk '{print $1}').txt"
    if [ ! -f "$d" ]; then
        mv "$f" "$d"
    else
        echo "File '$d' already exists! Skiped '$f'"
    fi
done

ターゲットファイルが存在する場合、この1行はそのファイルをスキップします。

おすすめ記事