无需脚本仅用CLI按创建日期移动指定TXT文件及报错解决
问题分析与解决
错误原因
你执行的命令报错,翻译后的提示为:mv: 无效选项 -- 'r'。
问题出在ls -l的输出包含文件权限、所有者等冗余信息(比如开头的-rw-r--r--),xargs会把这些内容全部传给mv,导致mv误将权限字段里的r当成了命令选项,从而触发错误。
可行解决方案
方案一:修正原命令(适合文件名无空格的场景)
通过awk提取ls -l输出中的纯文件名,再传给mv:
ls -l | grep "Dec 20" | awk '{print $9}' | xargs mv -t /directory1/dataframes/subset1
注意:如果文件名包含空格或特殊字符,这个方案会失效。
方案二:用find命令(推荐,适配所有文件名)
find命令能精准按时间筛选文件,且天然支持带空格的文件名,示例命令(筛选12月20日创建的TXT文件):
find . -type f -name "*.txt" -newerct "2023-12-20 00:00:00" ! -newerct "2023-12-21 00:00:00" -exec mv -t /directory1/dataframes/subset1 {} +
参数说明:
-type f:仅查找文件(排除目录)-name "*.txt":只筛选TXT格式文件-newerct "日期":筛选比指定时间新的文件,结合! -newerct可精准锁定12月20日当天的文件-exec mv ... {} +:批量传递找到的文件给mv,避免xargs的参数解析问题
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

