GNU bash バージョン 4.3.11(1)-リリース(x86_64-pc-linux-gnu)の使用
私はbashスクリプトに初めてアクセスし、shebang以外はどこから始めるべきかわかりません#!
。次のコマンド。
touch -a -m -t 201501010000.00 somefile.txt
、"somefile.txt"のアクセス時間と修正時間を修正します。Bashスクリプトを取得する方法はありますか?
"/mnt/harddrive/BASE/" ディレクトリで動作します。
ユーザーに入力するように求められます。 「somefilename.txt」または「somedirectoryname」。
- ユーザーに入力するように求められます。 「日付時間シリーズ」。現在のタイムスタンプを使用せず、代わりに
-t
オプションを使用して-d
時間/日付を明示的に指定してください。 - 再帰的に変更/修正します。 BASEディレクトリの「サブディレクトリ」の「atime」、「mtime」、およびその「サブディレクトリ」の「files」。そして
- 変更/修正。 「somefilename.txt」の「atime」と「mtime」は、「/mnt/hardrive/BASE/」ディレクトリにあります。
オプション6.「somefilename」および「somedirectoryname」ファイル拡張子の前に「mtime」を追加します。つまり、「somefilename-01-01-2015.txt」または「somedirectoryname-01-01-2015」です。ユーザーに尋ねます。 「はい/いいえ」が続く場合は、「somefilename.txt」「はい/いいえ」に「mtime」を追加しますか?
stat
ディレクトリとファイルをコンソールまたは「/tmp」ディレクトリのテキストファイルに出力して表示し、cat
「sometmpfile」を削除しますrm -r
。
答え1
次のように見えます。
#!/bin/bash
# 1. change directory
cd "/mnt/harddrive/BASE/"
# 2. prompt for name of file or directory
echo -n "file or directory name: "
# ... and read it
read HANDLE
# 2. b - check if it exists and is readable
if [ ! -r "$HANDLE" ]
then
echo "$HANDLE is not readable";
# if not, exit with an exit code != 0
exit 2;
fi
# 3. prompt for datetime
echo -n "datetime of file/directory: "
# ... and read it
read TIMESTAMP
# 4. set datetime for HANDLE (file or directory + files)
find $HANDLE | xargs touch -a -m -t "$TIMESTAMP"
# 5. ask, if the name should be changed
echo -n "change name of file by appending mtime to the name (y/n)?: "
# ... and read it
read YES_NO
if [ "$YES_NO" == "y" ]
then
# get yyyy-mm-dd of modification time
SUFFIX_TS=$(stat -c "%y" $HANDLE | cut -f 1 -d" ")
# rename, supposed, the suffix is always .txt
mv $HANDLE $(basename $HANDLE txt)-$SUFFIX_TS.txt
# let HANDLE hold the name for further processing
HANDLE=$HANDLE-$TIMESTAMP.$SUFFIX
fi
# 7. stat to console
stat $HANDLE
これはテストの一部にすぎませんが、開始する必要があります。
ここで何が起こっているのかを理解するには、echo、read、test、cut、touch、find、xargs コマンドを探す必要があります。
また、パラメータ置換、コマンド置換、パイプなど、いくつかの基本的なbash概念を知る必要があります。