콘텐츠에 따라 여러 파일의 이름 바꾸기

콘텐츠에 따라 여러 파일의 이름 바꾸기

내용의 첫 번째 단어를 사용하여 폴더의 모든 파일 이름을 바꾸는 방법은 무엇입니까? 예를 들어, 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

대상 파일이 존재하는 경우 이 한 줄은 해당 파일을 건너뜁니다.

답변2

이 내 꺼야방법.

#!/bin/bash
for file in *; 
do
    if [[ -f $file ]]; 
    then
        # cut word by single white space
        fileword=$(head -n1 "$file" | cut -f1 -d" ");
        # Everything after first dot is considered as extention
        ext=$(echo $file | sed 's/.*\.\(.*\)/.\1/g')
        [ "$file" != "$fileword" ] && $(mv  "$file"  "$fileword$ext")
    fi;
done

답변3

이것을 사용소식통

for i in *; do if [ ! -f $i ]; then echo "skipping $i"; else newname=`head -1 $i | sed 's/^\s*\([a-zA-Z0-9]\+\).*$/\1/'`; [ -n "$newname" ] && mv -i $i $newname.txt || echo "error at: $i"; fi; done

이렇게 하면 모든 파일이 해당 파일의 첫 번째 단어인 +로 대체됩니다 .txt. 내가 정의한첫번째 단어선행 공백을 버리고 첫 번째 발생이 됩니다 [a-zA-Z0-9]+.
부인 성명:자신이 있다면 그것을 사용하세요첫번째 단어모든 파일의 첫 번째 줄에! 그렇지 않으면 예상치 못한 결과가 발생할 수 있습니다 ;-)

답변4

for i in *.txt; do mv "$i" "$(head -1 "$i")".txt; done

관련 정보