使用 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”以及该“子目录”中的“文件”。和
- 改变/修改。 “somefilename.txt”的“atime”、“mtime”位于“/mnt/hardrive/BASE/”目录中。
可选 6. 将“mtime”附加到“somefilename”和“somedirectoryname”文件扩展名之前。即:“somefilename-01-01-2015.txt”或“somedirectoryname-01-01-2015”。提示用户:是否要将“mtime”附加到“somefilename.txt”“是/否”,如果“是/否”继续。
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 概念,即参数替换、命令替换和管道。