我想将文件从目录A移动到目录B。但是有一些条件。
目录A结构:
a.txt_20170502
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522
因此,我想重命名a.txt_20170502
该a.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
为您在脚本中使用的变量。