問題:
filenames.txt というファイル名のリストがあります。
/usr/share/important-library.c
/usr/share/youneedthis-header.h
/lib/delete/this-at-your-peril.c
これらのファイルの名前を変更または削除する必要があり、プロジェクト ディレクトリ ツリーでこれらのファイルへの参照を見つける必要があります。これらのファイルを/home/noob/my-project/
削除または修正できるようにするためです。
私の考えでは、 bash を使用して filename: を抽出basename filename
し、 for ループを使用してプロジェクト ディレクトリで grep します。
FILELISTING=listing.txt
PROJECTDIR=/home/noob/my-project/
for f in $(cat "$FILELISTING"); do
extension=$(basename ${f##*.})
filename=$(basename ${f%.*})
pattern="$filename"\\."$extension"
grep -r "$pattern" "$PROJECTDIR"
done
私はこのプロジェクトを完全に台無しにすることができました-誰かが私の論理に欠陥があると思いますか? より良い: 巨大なディレクトリ ツリーでこれを行うための、より信頼性が高くスケーラブルな方法を見つけますか? リビジョン管理が検討されていないと仮定しましょう (実際にはそうです)。