bash脚本中的批处理mv或重命名-将日期作为后缀追加
经过多次搜索和反复尝试,我无法对文件目录执行批处理bash脚本中的批处理mv或重命名-将日期作为后缀追加,bash,Bash,经过多次搜索和反复尝试,我无法对文件目录执行批处理mv或rename。我要做的是移动或重命名目录中的所有文件,以便将mv'd或renamed文件的$date(+'%Y%d%m')添加到原始后缀中 所有原始文件都有唯一的前缀,但不是.xml就是.txt,所以我想从org\u prefix.org\u suffix->org\u prefix.org\u suffix.DATE 我试过这个: $ mv /directory/* /directory/*$(date (+ '%Y%m%d') $
mv
或rename
。我要做的是移动或重命名目录中的所有文件,以便将mv
'd或rename
d文件的$date(+'%Y%d%m')
添加到原始后缀中
所有原始文件都有唯一的前缀,但不是.xml
就是.txt
,所以我想从org\u prefix.org\u suffix
->org\u prefix.org\u suffix.DATE
我试过这个:
$ mv /directory/* /directory/*$(date (+ '%Y%m%d')
$ for f in *; do mv $ $f.$(date +'_%m%d%y'); done
$ rename 's/*/.test/' *
但始终获取/directory/*.actualdate'不是目录
错误
我试过这个:
$ mv /directory/* /directory/*$(date (+ '%Y%m%d')
$ for f in *; do mv $ $f.$(date +'_%m%d%y'); done
$ rename 's/*/.test/' *
但是我得到mv:cannotstat'$;没有此类文件或目录
最后,我甚至尝试过:
$ mv /directory/* /directory/*$(date (+ '%Y%m%d')
$ for f in *; do mv $ $f.$(date +'_%m%d%y'); done
$ rename 's/*/.test/' *
只是想看看我是否可以将所有文件更改为org\u prefix.test
,但什么都没有发生(没有错误,nada,zip)
非常感谢您的帮助。在当前目录中循环文件(例如打印文件名)的正确方法是:
for file in *; do
echo "$file"
done
你将如何附加日期?当然,像这样:
for file in *; do
echo "$file.$(date +%Y%m%d)"
done
for file in *; do
mv -nv -- "$file" "$file.$(date +%Y%m%d)"
done
那你打算怎么做呢?当然,像这样:
for file in *; do
echo "$file.$(date +%Y%m%d)"
done
for file in *; do
mv -nv -- "$file" "$file.$(date +%Y%m%d)"
done
我补充说:
这样-v
就变得冗长了(我喜欢知道发生了什么,我的小妹妹看到屏幕上的这些台词总是印象深刻)mv
以避免覆盖其他现有文件。安全第一-n
为了防止文件名以连字符开头:如果没有--
,--
会与选项混淆。安全第一mv
.banana
的文件,请将的替换为:
for file in *.banana; do
对于包含单词banana
的文件:
for file in *banana*; do
等等
跟上香蕉
$ mv /directory/* /directory/*$(date (+ '%Y%m%d')
这不起作用,因为*
已展开为所有文件的列表,因此展开后,命令类似于:
mv /directory/file1 /directory/file2 /directory/file3 /directory/file1_date /directory/file1_date ...
所以您指定了许多目的地,但是mv的语法只允许一个目的地
for f in *; do mv $ $f.$(date +'_%m%d%y'); done
在这里,您忘记了$
之后的f
,这就是为什么您会收到错误消息
for f in *; do mv $f $f.$(date +'%m%d%y'); done
我认为现在应该可以了,但别忘了引用所有的变量
最后:
for f in *; do mv "$f" "$f.$(date +'%m%d%y')"; done
编辑:当变量后面直接有字符时,最好使用{}
来明确它们不是变量名称的一部分:
for f in *; do mv "$f" "${f}.$(date +'%m%d%y')"; done
谢谢你,它也很管用。如果我想把它放到bash脚本中,并从cron作业调用它,正确的语法是:for file in/some_directory/*;do mv-nv--“$file”“/new_目录$file$(日期+%Y%m%d)”done@user2755742如果它是从cronjob调用的,则不需要-v
开关,除非您想记录此输出。除此之外,一切都很好!(在将脚本放入crontable之前,请尝试该脚本,以检查是否一切正常)。