如何在目录中的所有文件的顶部插入文件的内容?

时间:2017-03-20 18:39:08

标签: bash

我写了一个bash脚本,递归地将副本右侧标题插入到目录中的所有文件中。但是,我不想将版权标题插入此脚本本身。我怎样才能做到这一点?我的脚本如下。

我想要做的第二件事是只在特定的文件类型中插入它。例如,* .java,*。c等。

#!/bin/bash
for file in *;
do
  if [$file == $0];
  then
    continue
  fi
  echo "copyright 
 "> copyright-file.txt;
  echo "" >> copyright-file.txt;
  cat $file >> copyright-file.txt;
  mv copyright-file.txt $file;
done

2 个答案:

答案 0 :(得分:0)

你可以这样做:

#!/bin/bash

copyright_file="copyright-file.txt"
cat > "$copyright_file" << EOF
copyright

EOF
for file in *; do
  [[ -f "$file" ]] || continue                   # only regular files
  [[ "$file" = "$copyright_file" ]] && continue  # skip copyright file
  [[ "$file" = "$0" ]] && continue               # skip the script
  cat - "$file" < "$copyright_file" > "$file.new" && mv "$file.new" "$file"
done
  • cat - "$file" < "$copyright_file" - 首先从stdin读取版权文件,然后从文件本身读取

答案 1 :(得分:0)

这样的事情应该有效。在附加/添加新版权之前,您可能需要检查文件是否有现有版权。

#!/usr/bin/env bash

#
# Directory where this script is located
#
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

#
# Save the name of the script in a global env variable
#
SCRIPT_NAME="$(basename $0)"

#
# Create copyright file
#
declare cr_file="${DIR}/copyright-file.txt"
echo "copyright data" > "${cr_file}"

#
# Get a list of java and c files
#
declare files=$(find "${DIR}" -regex ".*\.\(java\|c\)")

#
# Loop through files found and append header
#
for file in ${files[@]}; do
    # Skip file if it's this script.
    # Note this file will never be encountered, using the regex above, but
    # this is how to skip it.
    if [[ "${file}" == "${DIR}/${SCRIPT_NAME}" ]]; then
        continue
    fi

    # Prepend as header
    echo -e "$(cat "${cr_file}")\n$(cat ${file})" > "${file}"

    # -OR- Append as footer
    echo "$(cat "${cr_file}")" >> "${file}"
done