根据内容重命名多个文件

ana*_*abu 5 rename

如何使用内容的第一个单词重命名文件夹中的所有文件?例如,如果 a.txt 的第一行包含“Unix is an OS”,则 a.txt 应重命名为 Unix.txt

Sla*_*hin 9

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)

或更长的变体(作为脚本):

#!/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
Run Code Online (Sandbox Code Playgroud)

如果目标文件存在,则单行跳过它。

  • 我会简化`head -1 "$f" | awk '{print $1}'` 到 `<"$f" awk {print $1; 退出}`。 (5认同)