此问题已经在这里有了答案:
我的目标是搜索包含模式的文件并将其复制到文件夹。文件可能在文件夹中的许多文件夹中可用(例如/ 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
不要将其存储在变量中。
grep -lHrn "$pattern" "$LOG_FILE_PATH" | while IFS= read -r file; do cp "$file" temp; done
还请注意,您不需要剪切grep结果,因为-l
标志仅提供您想要的文件名。
如果必须将其存储在变量中,请使用与上述相同的模式将其存储到array变量中,这将用于区分文件中的空白与空白。