仅将 uniq 文件从一个目录移动到其他目录

仅将 uniq 文件从一个目录移动到其他目录

我想将文件从目录A移动到目录B。但是有一些条件。

目录A结构:

a.txt_20170502 
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522

因此,我想重命名a.txt_20170502a.txt文件并将其移动到目录 B,但如果a.txt目录 B 中存在该文件,则不会移动该文件。

例子:

a.txt
asd.txt

此过程持续进行,直到所有候选文件都从目录 A 移动到 B。

我很困惑如何检查文件是否已在该目录中,它不会移动该文件。

健康)状况:- 还有另一个脚本在后台运行,它将从目录 B 获取数据。因此,如果目录 B 中存在任何文件,它将自动复制到大型机服务器。

答案1

for file in A/*.txt_*; do
  newfile="B/${file##*/}"  # remove A path, add B path
  newfile="${newfile%_*}"  # remove trailing suffix

  if [[ ! -f "$newfile" ]]; then
    mv "$file" "$newfile"
  fi
done

这将迭代所有A匹配的文件*.txt_*。它将通过A用路径替换路径来构造一个新的文件路径,并从文件名中B删除尾部后缀。_xxxxxxxx如果新文件名尚未存在于 下B,则该文件将被移动到那里。

答案2

您可以使用以下方法测试是否存在:

if [!-f B/a.txt]
then
  mv a.txt_20170502 B/a.txt
fi

您应该将a.txt_20170502和替换a.txt为您在脚本中使用的变量。

相关内容