0

ディレクトリ内のすべての *.txt ファイルを最終変更日付に変更しようとしているこの bash スクリプトがあります。これはスクリプトです:

#!/bin/bash
# Renames the .txt files to the date modified
# FROM: foo.txt  Created on: 2012-04-18 18:51:44
# TO:    20120418_185144.txt
for i in *.txt
do
mod_date=$(stat --format %y "$i"|awk '{print $1"_"$2}'|cut -f1 -d'.'|sed 's/[: -]//g') 
mv "$i" "$mod_date".txt
done

私が得ているエラーは次のとおりです。

renamer.sh: 6: renamer.sh: Syntax error: word unexpected (expecting "do")

どんな助けでも大歓迎です。お時間をいただきありがとうございます。

4

2 に答える 2

2

s を介して s を介して s を介して s を介して s を介して s を介して s を介して s を介して s を介してsを介してsを介して s を介してgrepsを介してパイプすることで、人々が本当にスマートになる方法を見て、私はいつも驚かされます...sedawkcutheadtail

あなたの特定のケースでは、dateコマンドがファイルの変更日をフォーマットできるため(-rオプションを使用して)、本当に幸運です!

したがって、

#!/bin/bash

# It's a good idea to use one of the two:
shopt -s failglob
# shopt -s nullglob

for i in *.txt; do
    mod_date=$(date -r "$i" +'%Y%m%d_%H%M%S')
    mv "$i" "$mod_date.txt"
done

トリックを行う必要があります。

nullgloborについてfailglob: に一致するファイルがない場合*.txt、スクリプトはエラーで終了します ( を使用している場合failglob)。または、 を使用している場合はnullglob、この場合*.txtは何も展開されないため、何も起こりません。

于 2012-12-01T08:44:13.697 に答える
0

貼り付けたコードは完全ではありません。以下のコードをあなたのコードと比較してください。

#!/bin/bash
# Renames the .txt files to the date modified
# FROM: foo.txt  Created on: 2012-04-18 18:51:44
# TO:    20120418_185144.txt
for i in *.txt
do
    mod_date=$(stat --format %y "$i"|awk '{print $1"_"$2}'|cut -f1 -d'.' | sed 's/[: -]//g')
    mv "$i" "${mod_date}.txt"
done
于 2012-12-01T05:02:44.613 に答える