Bash 腳本,要求使用者輸入,以遞歸方式更改目錄、子目錄和文件的 mtime atime linux
使用 GNU bash,版本 4.3.11(1)-release (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”。和
更改/修改。位於“/mnt/hardrive/BASE/”目錄中的“somefilename.txt”的“atime”、“mtime”。可選 6. 在文件副檔名之前將“mtime”附加到“somefilename”和“somedirectoryname”。即:“somefilename-01-01-2015.txt”或“somedirectoryname-01-01-2015”。提示使用者:如果“YES/NO”繼續,是否要將“mtime”附加到“somefilename.txt”“YES/NO”。
stat
目錄和文件輸出到控制台或“/tmp”目錄文本文件並顯示,cat
然後刪除“sometmpfile”rm -r
。
它可能看起來像這樣:
#!/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 概念,即參數替換、命令替換和管道。