Bash 脚本,要求用户输入,以递归方式更改目录、子目录和文件的 mtime atime linux

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 脚本?

    1. 在目录“/mnt/harddrive/BASE/”中操作

    2. 提示用户输入。 “somefilename.txt”或“somedirectoryname”。

    3. 提示用户输入。 “日期时间序列”。不要使用当前时间戳,而是使用-t-d选项显式指定时间/日期。
    4. 递归地更改/修改。 BASE 目录中“子目录”上的“atime”、“mtime”以及该“子目录”中的“文件”。和
    5. 改变/修改。 “somefilename.txt”的“atime”、“mtime”位于“/mnt/hardrive/BASE/”目录中。

    可选 6. 将“mtime”附加到“somefilename”和“somedirectoryname”文件扩展名之前。即:“somefilename-01-01-2015.txt”或“somedirectoryname-01-01-2015”。提示用户:是否要将“mtime”附加到“somefilename.txt”“是/否”,如果“是/否”继续。

    1. 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 概念,即参数替换、命令替换和管道。

相关内容