我写了一个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
答案 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