4

经过大量的搜索和反复试验,我无法进行批处理mvrename文件目录。我想做的是移动或重命名目录中的所有文件,以便将mv'd 或renamed 文件$date (+ '%Y%d%m')添加到原始后缀中。

所有原始文件都有唯一的前缀,但要么.xml.txt想从org_prefix.org_suffix->org_prefix.org_suffix.DATE

我试过这个:

$ mv /directory/* /directory/*$(date (+ '%Y%m%d') 

但总是/directory/*.actualdate' is not a directory出错。

我试过这个:

$ for f in *; do mv $ $f.$(date +'_%m%d%y'); done 

但我明白了mv: cannot stat '$'; No such file or directory

最后,我什至试过这个:

$ rename 's/*/.test/' * 

只是想看看我是否可以将所有文件更改为org_prefix.test但没有任何反应(没有错误,nada,zip)

非常感谢任何帮助。

4

2 回答 2

5

循环遍历当前目录中的文件(例如,打印它们的名称)的正确方法是:

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

我已经添加:

  • -v所以mv要冗长(我想知道发生了什么,我的小妹妹看着屏幕上流淌的所有这些台词总是给我留下深刻印象)。
  • -n以免覆盖其他现有文件。安全第一。
  • --以防文件名以连字符开头:没有--,mv会与选项混淆。安全第一。

如果您只想查看带有扩展名的文件.banana,请将其替换为for

for file in *.banana; do

of 对于包含单词的文件banana

for file in *banana*; do

等等。

跟上香蕉!

于 2013-10-29T22:58:55.340 回答
1
$ 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
于 2013-10-29T23:35:22.217 回答