bash - 如何编写将作为 cron 作业工作的 mv 命令
问题描述
我正在运行 Centos 7。我需要一个 cron 作业,将所有内容从 /media/tmp 移动到 /media/tv,除了 .grab 和 Transcode 文件夹。昨天我认为以下方法有效,但今天它也移动了 Transcode 文件夹。
mv -n /media/tmp/*!(Transcode)!(.grab) /media/tv/
我发现上面的内容不能像 '(' 原因和错误一样作为 cron 工作。我知道我需要逃避这些,但现在我明白了
mv: cannot stat ‘/media/tmp/!(Transcode)!(.grab)’: No such file or directory
我目前对 bash 脚本的尝试是
#!/bin/bash
mv -n '/media/tmp'/*!\(Transcode\)!\(.grab\) '/media/tv/'
我的理解是 * 是问题所在,但是在文件路径上使用 ' 或 " 似乎并不能像我发现的那个帖子那样修复它。
关于如何让它正常工作的任何想法?
解决方案
您正在尝试使用extglob,它可能没有为 cron 启用。!
我会完全避免该选项,使用负正则表达式匹配遍历全局。
for file in /media/tmp/*; do
[[ ! "$file" =~ Transcode|\.grab$ ]] && mv -n "$file" /media/tv/
done
推荐阅读
- c# - ComboBox 的 SelectedIndexChanged 事件 - 填充控件值
- jquery - Jquery .slideDown() 仅从顶部
- javascript - WooCommerce Shipping 选项交货价格
- shell - 获得 -f Linux 标志的定义比预期的更难
- php - 如何编码数据数组并保存到数据透视表 laravel
- javascript - Angular 创建相同组件的另一个实例,而不是更新现有的
- java - 构造函数链。为什么要在 this() 中初始化一个参数
- javascript - jQuery.ajax - 用新值更新表格单元格
- git - 自特定提交以来的 git 浅克隆
- javascript - Chrome 扩展 JS/JQuery