ファイル名で見つかったパターンにのみ依存して、ファイル名とファイル名の内容を変更します。

ファイル名で見つかったパターンにのみ依存して、ファイル名とファイル名の内容を変更します。

filename.ext次のパターンに基づいてコンテンツの一致パターンを置き換えることができるかどうか疑問に思います。ファイル名それ自体で使用されますsedgrepおそらく?)。

たとえば、再作成できるファイルをいくつか紹介します。

cat > '[2022] Diary 2022 (essay, Travels).txt' <<\EOF
TITLE/- Diary 2022 (essay, Travels) -\TITLE

@

sometext...
EOF
cat > '[2022] Diary 2022 (list, Recipes).txt' <<\EOF
TITLE/- Diary 2022 (list, Recipes) -\TITLE

@

sometext...
EOF
cat > '[2022] Diary 2022 (watchlist, Movies-).txt' <<\EOF
TITLE/- Diary 2022 (watchlist, Movies-) -\TITLE

@

sometext...
EOF
cat > '[2022] Diary 2022 (list, Movies+).txt' <<\EOF
TITLE/- Diary 2022 (list, Movies+) -\TITLE

@

sometext...
EOF

私が使用したいマッチングパターンは(人が右から左に読む方法)です。その間のすべて閉じる閉じ括弧そして初めて向かい合った空間

私はこのパターンが以下に基づいていると言いたいと思います。場所、代わりに言葉または数字またはその他

フーバプーバ(foob、マッチ).ext

私はこれが正しい正規表現でなければならないと思います>\(.+\s(\w.+)\)

私は状況が次のように見えるようにしたいです。

[2022] Diary 2022 (essay, Travels).txt>は>にtravels.txt なり、その内容は>になります。

TITLE/- travels -\TITLE

@

sometext...

[2022] Diary 2022 (watchlist, Movies-).txt>は>にmovies-.txt なり、その内容は>になります。

TITLE/- movies- -\TITLE

@

sometext...

[2022] Diary 2022 (list, Movies+).txt>は>にmovies+.txt なり、その内容は>になります。

TITLE/- movies+ -\TITLE

@

sometext...

など...

ベストアンサー1

sedこのタイプのファイル名を変更することはできませんmv

bashバージョンがある場合は、mapfile名前の変更と変更が簡単です。

モードファイル

#!/bin/bash

set -o noclobber

for filename; do
    if [[ $filename =~ ^'['[0-9]+']'[[:space:]]+(.*[[:space:]]([^[:space:]]+)')')'.txt'$ ]]; then

        old='TITLE/- '${BASH_REMATCH[1]}' -\TITLE'
        new='TITLE/- '${BASH_REMATCH[2]}' -\TITLE'
        out=${BASH_REMATCH[2]}.txt

        mapfile -d '' data <"$filename"
        printf '%s' "${data//"$old"/"$new"}" >"$out"
        # rm "$filename"
    fi
done
$ chmod +x modfile
$ ./modfile *.txt

おすすめ記事