2017-03-20 8 views
0

私はディレクトリ内のすべてのファイルにコピー権のヘッダーを再帰的に挿入するbashスクリプトを書いています。しかし、私はこのスクリプト自体に著作権ヘッダーを挿入したくありません。どうやってやるの?私のスクリプトは以下の通りです。ディレクトリ内のすべてのファイルの先頭にファイルの内容を挿入するにはどうすればよいですか?

もう1つは、特定のファイルタイプにのみ挿入することです。例えば、* .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

私は、ハイテクな解決策「mvスクリプト」は間違っていると思いますか? – Boldewyn

答えて

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"は - 、まずファイル自体を標準入力から著作権ファイルを読み込み
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 
関連する問題