ファイルリストに基づいてファイルの場所と内容を出力する

ファイルリストに基づいてファイルの場所と内容を出力する

次のようなさまざまなファイルの場所を含むファイルがありますlocationfile.txt

/home/user/documents/file1
/home/user/file2
/home/user/file3

各テキストファイルには約10行があり、すべてのファイルをfinalfile

私がそうするなら

cat locationfile.txt | while read line; do cat "$line"; done

これにより、すべてのファイルが一緒に印刷され、約30行のテキストファイルになります。

私の質問は、テキストの間にファイルの場所を含むファイル出力を次のように含めることができる方法です。

/home/user/documents/file1
text
text
text
""
/home/user/file2
text
text
text
""
/home/user/file3
text
text
text
""

ベストアンサー1

ファイル名に対してOR演算をcat実行する前にecho:printf

while read line; do printf '%s\n' "$line"; cat "$line"; done <locationfile.txt >finalfile

または、読みやすくするには、次の手順を実行します。

while read line; do
  printf '%s\n' "$line"
  cat "$line"
done <locationfile.txt >finalfile

これを行うには、すべてのパスにパスがあってはlocationfile.txtならないことに注意してください\

パス名に含めるのは非常にまれですが、\そうする方が安全です。

while read -r line; do
  printf '%s\n' "$line"
  cat "$line"
done <locationfile.txt >finalfile

...同じ制限はありません。

ファイルが実際に存在することを確認し、存在しない場合に警告を出力するチェックを追加します。

while read -r line; do
  if [[ -f "$line" ]]; then
    printf '%s\n' "$line"
    cat "$line"
  else
    printf 'Warning: "%s" does not exist\n' "$line" >&2
  fi
done <locationfile.txt >finalfile

ここで「存在しない」とは、「少なくとも一般ファイルではない」を意味する。

""一種のファイルコンテンツ終了タグとして使用するには、次のようにしますcat

while read -r line; do
  if [[ -f "$line" ]]; then
    printf '%s\n' "$line"
    cat "$line"
    echo '""'
  else
    printf 'Warning: "%s" does not exist\n' "$line" >&2
  fi
done <locationfile.txt >finalfile

最後に、独自の文書化名を指定します。

while read -r file_path; do
  if [[ -f "$file_path" ]]; then
    printf '%s\n' "$file_path"
    cat "$file_path"
    echo '""'
  else
    printf 'Warning: "%s" does not exist\n' "$file_path" >&2
  fi
done <file_paths.txt >files_concat_with_paths.txt

おすすめ記事