0

私は現在、GNU /LinuxシステムでいくつかのC++コードに取り組んでおり、ソースコードフォルダーは.cppファイルと.hファイルでいっぱいです。

一般に、このコードでは、すべて.cppのファイルに対応する.hヘッダーファイルがありますが、必ずしもその逆ではありません。以下の出力--は、リストされたヘッダーファイルに対応する.cppファイルがないことを示しています

ファイルの一覧表示がこの形式で行われるように、.bashrc / .zshrcに追加のフラグを定義して、これを行うbashスクリプトを作成したいと思います。私が7つのファイルを持っている.cppとしましょう.h

$ listscript
hello1.cpp hello1.h
hello2.cpp hello2.h
   --      hello3.h 
hello4.cpp hello4.h      
4

4 に答える 4

1
#!/usr/bin/env bash
declare files=(*)
declare file= left= right= width=10
declare -A listed=()
for file in "${files[@]}"; do
    if [[ $file == *.h ]]; then
        continue
    elif (( ${#file} > width )); then
        width=${#file}
    fi
done
for file in "${files[@]}"; do
    if [[ ${listed[$file]} == 1 ]]; then
        continue
    elif [[ $file == *.cpp ]]; then
        left=$file right=${file%.cpp}.h
    elif [[ $file == *.h ]]; then
        left=${file%.h}.cpp right=$file
    else
        left=$file right=
    fi

    [[ $left ]]     && listed["$left"]=1
    [[ $right ]]    && listed["$right"]=1

    [[ -e $left ]]  || left='--'
    [[ -e $right ]] || right='--'

    printf "%-*s %s\n" "$width" "$left" "$right"
done
于 2012-09-01T18:07:08.420 に答える
1

すべて.hのファイルには対応するファイルがある場合とない場合があるため、.cppすべてのファイルを反復処理し.hます。それぞれについて、対応するファイルが存在するかどうかを確認し、.cpp存在しない場合は「---」を使用できます。

for fh in *.h; do
    fcpp=${fh/%.h/.cpp}
    [ -f "$fcpp" ] || fcpp="---"
    printf "%s\t%s\n" "$fcpp" "$fh"
done
于 2012-09-01T18:09:47.900 に答える
0

(で)はどうですかbash

for f in $(ls -1 *.{cpp,h} | sed -e 's/.cpp//;s/.h//' | sort -u)
do 
    [ -f "${f}.cpp" ] && printf "%s " "${f}.cpp" || printf " -- "
    [ -f "${f}.h" ] &&  printf "%s" "${f}.h" || printf " -- "; 
    printf "\n"
done
于 2012-09-01T17:35:47.357 に答える
0

これがbashでの私の試みです:

#!/bin/bash

# run like this:
# ./file_lister DIRECTORY

for i in $1/*.h
do
        name=`basename $i .h`
        if [ -e $name.cpp ]
        then
          ls $name.*
        else
          echo "-- " `basename $i`
        fi
done
于 2012-09-01T17:49:32.950 に答える