【问题标题】:impossible to evaluate dir while copying in loop循环复制时无法评估 dir
【发布时间】:2019-08-21 09:55:38
【问题描述】:

我正在执行这个命令:

for i in `ls -lrt --full-time /tmp/source/ | grep "2018-11" | awk '{print $9}' `; do cp /tmp/source/$i* /tmp/data/; done

但我收到此错误:

cp: 不可能的 d'évaluer « /tmp/source/\033[01;32mpart-r-00015-c1055bf2-3985-4e44-9c2e-af8eb460c471.snappy.parquet\033[0m\033[K** »: Aucun fichier ou dossier de ce type

但文件是:

part-r-00015-c1055bf2-3985-4e44-9c2e-af8eb460c471.snappy.parquet

该命令正在添加额外的:\033[01;32m 和 \033[0m\033[K**

但我不知道为什么?

谢谢

输出

ls -lrt --full-time /tmp/source/ | grep "2018-11" | awk '{print $9}' 

是:

part-r-00018-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 
part-r-00016-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 
part-r-00021-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 
part-r-00017-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 
part-r-00022-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 
part-r-00023-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 

【问题讨论】:

  • 你能提供 ls -lrt --full-time /tmp/source/ 的输出吗? grep "2018-11" | awk '{print $9}'
  • 这是文件名——控制字符(额外的东西)在某些程序中不显示。
  • ls -lrt --full-time /tmp/source/ 的输出 | grep "2018-11" | awk '{print $9}' 是:part-r-00018-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* part-r-00016-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 部分-r-00021-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 部分-r-00017-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet* 部分-r-00022-28ce784e-2519 -8d29-83074be49e84.snappy.parquet* part-r-00023-28ce784e-2519-4552-8d29-83074be49e84.snappy.parquet*
  • ls -lrt ... 的输出中真的有* 字符吗?
  • 是的,ls -lrt 的输出中确实有 * 字符 ...

标签: linux loops copy command cp


【解决方案1】:

考虑到"ls to output sorted filenames and operate on the results using e.g. awk [...] cannot be made robust",并尝试猜测您想要什么,该命令对您有帮助吗?

find /tmp/source/ -type f -newermt "2018-11-1" \! -newermt "2018-12-1" -print0 | while IFS= read -r -d '' filename; do cp -a "$filename" /tmp/data/; done

注意:find 命令试图查找在 2018 年 11 月被修改的内容(“newermt”的“mt”指的是“修改时间”,“引用被直接解释为时间”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2014-06-03
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多