Bash

Bash 腳本,要求使用者輸入,以遞歸方式更改目錄、子目錄和文件的 mtime atime linux

  • October 2, 2015

使用 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 腳本?

    1. 在目錄“/mnt/harddrive/BASE/”內操作

    2. 提示使用者輸入。“somefilename.txt”或“somedirectoryname”。

    3. 提示使用者輸入。“日期時間序列”。不使用目前時間戳,而是使用-t-d選項明確指定時間/日期。

    4. 遞歸更改/修改。BASE 目錄中的“子目錄”和該“子目錄”中的“文件”上的“atime”、“mtime”。和

    5. 更改/修改。位於“/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”。

    6. 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 概念,即參數替換、命令替換和管道。

引用自:https://unix.stackexchange.com/questions/180315