【发布时间】:2020-01-25 08:37:32
【问题描述】:
我的目标是搜索包含模式的文件并将其复制到文件夹中。这些文件可能在一个文件夹的多个文件夹中可用(例如 /home/abc/logs/ ....)。一些文件名和文件夹带有空格字符,包括空格。我正在尝试将找到的结果分配给一个变量并复制它。但结果是“参数列表太长”
Linux 服务器
pattern="somesttring" ;
LOG_FILE_PATH="/path/to/logs/"
LOGS_TO_COPY=$(grep -Hrn "$pattern" "$LOG_FILE_PATH" | cut -d: -f1)
cp $LOGS_TO_COPY temp #temp is folder to which i have to copy
我收到以下错误:
cp $LOGS_TO_COPY temp/
-bash: /bin/cp: Argument list too long
【问题讨论】:
-
@tripleee:我看不出这两个问题都是骗人的。单独引用不会保留
grep输出中参数分隔符和真实空格之间的区别。如果我错过了骗子的哪一部分回答了这个问题的问题,请证明。 (请注意,cp "$LOGS_TO_COPY" temp/立即显而易见的答案是错误的。) -
添加了另一个副本。你好像在找
grep -rl "$pattern" "$LOG_FILE_PATH" | xargs cp -t temp/ -
@tripleee 我对我列出的任何选项都很满意。该链接至少是相关的,尽管不是直接的解决方案(
grep具有--null选项至少需要是评论)。鉴于产生正确的解决方案显然不像看起来那么简单,我将投票重新开放,尽管link 对于解释原因和一般性非常有用。 (我的另一条评论因不正确而被删除。)
标签: bash shell unix cp file-copying