创建目录时移动文件的 Bash 脚本

创建目录时移动文件的 Bash 脚本

我有这个脚本来循环遍历所有文件夹并移动超过 2 年的文件。我使用安装命令,因为它会在目标路径上创建必要的目录,然后删除源。我想更改脚本以使用该命令,mv因为它比复制文件然后删除它要快得多。但我不知道如何在没有文件名的情况下获取路径以传递给命令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

答案1

但你需要dirname注意,如果你给它一个目录名,它会给你到父目录的路径,也许一个例子更简单:

$ 目录名 /usr/bin/bash
/usr/bin

$ 目录名 /usr/bin
/usr

回到你的脚本,当你搜索文件时,dirname 的微妙之处不起作用。我也会简化它一点,我不喜欢 subshel​​l,没有它对我来说更容易解析。它变成:

#!/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。

顺便说一句,当您使用相同的文件系统时,mv它比cp+更快。rm

相关内容