复制已在目标位置重命名的文件时如何避免重复

复制已在目标位置重命名的文件时如何避免重复

我必须从文件夹中获取图片(其中包含自动更新的子文件夹)及其扩展名。

必须将这些文件复制到一个文件夹中,基于 PHP 的网站将在其中编辑它们(通过重命名和创建 XML 文件),以便可以下载并集成到 XML 源中。

由于脚本的重命名功能,当我执行复制增益时,所有文件都是重复的,因为脚本已经将原来的重命名了。

我尝试了一些方法,rsync但我正在寻找更强大的方法,因为我无法复制具有外部“历史记录”的文件。

#!/bin/bash
find  '/home/name/picture' -name '*.jpg' | while read FILE ; do rsync --backup  --backup-dir=incremental --suffix=.old  "$FILE" /var/www/media ; done
wget --spider 'http://myscript.php' ; 
#exit 0

PS:作为一点补充,我想在复制后用“空格”替换“。” *.jpeg。由于扩展名的原因,我的 PHP 脚本在定义带逗号的文件时遇到了一些问题。我在想一个带有函数的命令find——就像我以前做的那样sed?这是个好主意吗?

答案1

您可以使用以下内容:

#!/bin/ksh
DEST_DIR=/destination
HIST_DIR=/images_bck
SOURCE_DIR=/images

find ${SOURCE_DIR} -name "*.jpg" >${HIST_DIR}/tmp.file
exec 3<${HIST_DIR}/tmp.file

while read file <&3;do
  file_name=$(basename "${file}")
  if [ ! -f "${HIST_DIR}/${file_name}.old" ];then
    cp -p "${file}" "${HIST_DIR}/${file_name}.old"
    cp "${file}" "${DEST_DIR}"
  fi
done
exec 3<&-
[ -f ${HIST_DIR}/tmp.file ] && rm -f ${HIST_DIR}/tmp.file

对于新用户;

安装 ksh

这是一个 kornshell,在更改 DEST_DIR , HIST_DIR , SOURCE_DIR 之后执行

ksh -v ./MySuperScript.ksh

相关内容