💭

fzfで選択したファイルの中身を出力する

2023/08/01に公開

やりたいこと

CahtGPTにファイルを渡す時に、下記のようにファイルごとのコピペして面倒です(他によい方法があるのかもしれない)。

Here is fileAAA.js ...
<はりつけ>

Here is fileBBB.py ...
<はりつけ>

前提:fzfインストール

https://github.com/junegunn/fzf#installation

やったこと

fzfで選択したファイルの中身を書き出してくれるシェルスクリプトを作りました。

使い方

対象のディレクトリに移動してから、shを呼びます(これはどこにあってもよい)。
コンソールに出すと長いので> output.txtでリダイレクトしていますが、お好みで。

cd /target/dir/
bash /path/to/print_out_selected_files.sh > output.txt

Code

print_out_selected_files.sh
#!/bin/bash

# print_out_selected_files.sh
# This script uses fzf to let the user select one or more script files
# from the current directory and its subdirectories, then prints the contents
# of the selected files to the console.

# List of script extensions
exts=("*.sh" "*.py" "*.js" "*.rb" "*.pl" "*.php" "*.mjs")

# Build the find command to locate scripts of the above types
find_str="find . -type f \( "
for ext in "${exts[@]}"; do
    find_str="${find_str} -name '${ext}' -o"
done
find_str="${find_str::-3} \)" # Remove the last "-o" and close the parentheses

# Execute the find command
scripts=$(eval ${find_str})

# Use fzf to let the user select scripts
selected=$(echo "${scripts}" | fzf -m)

# Print the contents of each selected file
while IFS= read -r line; do
    echo "Here is ... ${line}"
    echo "------------------------------------"
    cat "${line}"
    echo -e "\n\n"
done <<< "$selected"

Discussion