Bash脚本移动文件,同时创build目录

我有这个脚本循环遍历所有文件夹,并移动超过2年的文件。 我正在使用安装命令,因为它在目标path上创build必要的目录,然后删除源代码。 我想更改脚本使用mv命令,因为它比复制文件然后删除它快得多。 但我不知道如何得到没有文件名的path传递给mkdir -p命令? 我应该如何修改脚本?

 for d in *; do find "$d" -type f -mtime +730 -exec sh -c ' echo "moving $d/{}" && install -Dp "/data/Customer Files$d/{}" "/data/Customer Files Over 2 Years Old$d/{}" && rm -f "/data/Customer Files$d/{}"' \; done 

你需要dirname但要小心,如果你给它一个目录名称,它会给你的path直到父目录,也许一个例子更容易:

$ dirname / usr / bin / bash
在/ usr / bin中

$ dirname / usr / bin
在/ usr

回到你的脚本,当你search文件的时候,dirname的微妙之处不会起作用。 我也会简化一下,我不喜欢subshel​​l,没有它就更容易parsing。 它成为了:

 #!/bin/bash SRC=./src DST=./dst for f in `cd $SRC && find . -type f -mtime +730`; do echo "moving $f" mkdir -p "$DST/`dirname $f`" mv "$SRC/$f" "$DST/$f" done 

显然你必须根据你的需要设置SRC / DST。

顺便说一句,当你在同一个文件系统FWIK时, mvcp + rm快。