for filename in $*; do mv "$filename" "${filename//.temp/}";
在特定日期的unix中重命名文件
我正在使用此脚本来重命名文件。
它从文件名中删除.temp。我已将此文件保存为a.sh
脚本,并将其与我要重命名的文件一起执行。但是如果我想重命名说100个文件并且只有特定日期,这会变得乏味。有没有一种方法,我只传递日期的脚本作为参数,并将其重命名该日期的文件,仅无需我来传递文件名
for filename in $*; do mv "$filename" "${filename//.temp/}";
在特定日期的unix中重命名文件
我正在使用此脚本来重命名文件。
它从文件名中删除.temp。我已将此文件保存为a.sh
脚本,并将其与我要重命名的文件一起执行。但是如果我想重命名说100个文件并且只有特定日期,这会变得乏味。有没有一种方法,我只传递日期的脚本作为参数,并将其重命名该日期的文件,仅无需我来传递文件名
您可以修改a.sh
这样的:
find . -maxdepth 1 -type f -iname "*.temp" -exec bash -c 'mv $0 ${0//.temp/}' {} \;
newermt
是上次修改文件的日期。
,并可以执行它作为
./a.sh 2017-09-27
为了测试是否在命令行这个命令的作品,你可以试试这个脚本之外:
find . -maxdepth 1 -type f -iname "*.temp" -exec bash -c 'mv $0 ${0//.temp/}' {} \;
另一种选择是使用-nt
测试
# create a timestamp file
timestamp_filename=/tmp/$$
touch -t 201709270000 "$timestamp_filename"
trap 'rm "$timestamp_filename"' EXIT
# then to check a file is newer
if [[ "$a_file" -nt "$timestamp_filename" ]]; then
# a_file is newer
fi
获取此错误> mv:invalid option - '一个' 。我用最后一条命令来检查 – Ritesh
现在试试,我已经将双引号改为单引号。 – batMan
我用这个>>>查找。 -type f -newermt 2017-10-03! -newermt 2017-10-04 -exec bash -c'mv $ 0 $ {0 //。temp /}'{} \; >>>>你的命令是重命名所有文件。纠正我,如果我错了 – Ritesh