2017-09-27 77 views
1

for filename in $*; do mv "$filename" "${filename//.temp/}";在特定日期的unix中重命名文件

我正在使用此脚本来重命名文件。
它从文件名中删除.temp。我已将此文件保存为a.sh脚本,并将其与我要重命名的文件一起执行。但是如果我想重命名说100个文件并且只有特定日期,这会变得乏味。有没有一种方法,我只传递日期的脚本作为参数,并将其重命名该日期的文件,仅无需我来传递文件名

回答

1

您可以修改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/}' {} \; 
+0

获取此错误> mv:invalid option - '一个' 。我用最后一条命令来检查 – Ritesh

+0

现在试试,我已经将双引号改为单引号。 – batMan

+0

我用这个>>>查找。 -type f -newermt 2017-10-03! -newermt 2017-10-04 -exec bash -c'mv $ 0 $ {0 //。temp /}'{} \; >>>>你的命令是重命名所有文件。纠正我,如果我错了 – Ritesh

0

另一种选择是使用-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