仅当存在另一个具有不同后缀的文件时才移动文件

仅当存在另一个具有不同后缀的文件时才移动文件

脚本在完成之前就已经完成了;将文件从一组初始输入文件创建为具有不同后缀的输出文件,例如。

file1.ext -> file1.oxt

(注意,给出的扩展名是任意的)。

在重新运行初始脚本之前,如何仅将已存在输出文件的输入文件移动到单独的目录中?类似于“仅当 basename(file).oxt 存在时才创建 mv 文件”。其他语言也可以做到这一点,但我对 Bash 的了解非常缺乏。

谢谢!

答案1

这是你的 bash 脚本:

for file in `ls *.old`
do
    BASE="${file%.*}"
    if [[ -e ${BASE}.new ]]
    then
        mv $file /yourdir/
    fi
done

只需将 .old 和 .new 替换为您的后缀,将 yourdir 替换为您的真实目录即可。

答案2

寻找+巴什解决方案:

find . -type f ! -name "*.oxt" -exec bash -c 'f=$1; 
        fp="${f%.*}"; [[ -f "$fp.oxt" ]] && mv "$f" dest_dir/' _ {} \;

  • f=$1- 完整的文件路径

  • fp="${f%.*}"- 删除扩展名的文件路径(无扩展名)

  • [[ -f "$fp.oxt" ]]- 检查相应的“输出”文件是否存在

  • mv "$f" dest_dir/- 将初始文件移动到dest_dir目录

相关内容