如何将文件头复制到其他文件而不会丢失bash中的换行符?

Joy*_*yee 1 bash echo head

我得到的是这样的:

working_dir
|-- samples
|-- table1.tbl
|-- table2.tbl
|-- table3.tbl
Run Code Online (Sandbox Code Playgroud)

我想拥有的是这样的:

working_dir
|-- samples
|   |-- table1.tbl
|   |-- table2.tbl
|   |-- table3.tbl
|-- table1.tbl
|-- table2.tbl
|-- table3.tbl
Run Code Online (Sandbox Code Playgroud)

samples目录中的.tbl文件将包含根目录中这些.tbl文件的前10行.

我试过了

for FILE in `ls *.tbl`; do
  NEWFILE="samples/$FILE"
  if [ ! -f "$NEWFILE" ] ; then
      touch "$NEWFILE"
  fi
  echo `head $FILE` > $NEWFILE
done
Run Code Online (Sandbox Code Playgroud)

但是.tbl文件中的换行符samples丢失了,10行的内容被压缩到每个.tbl文件中的一行.

有帮助吗?谢谢.

mic*_*has 7

for FILE in *.tbl; do
  head "$FILE" > "samples/$FILE"
done
Run Code Online (Sandbox Code Playgroud)

你的问题是由回声和反引号引起的.反引号将输出展平为一行,echo只输出该单行.

  • 这不是倒钩的反击.使用echo而不引用是罪魁祸首.这可能有效:`echo'$(head"$ file")"`,但不必要地复杂. (3认同)