问题:
我有一个文件名列表,filenames.txt:例如。
/usr/share/important-library.c
/usr/share/youneedthis-header.h
/lib/delete/this-at-your-peril.c
我需要重命名或删除这些文件,并且需要在项目目录树中找到对这些文件的引用:/home/noob/my-project/
以便删除或更正它们。
我的想法是使用 bash 提取文件名: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
我可以彻底搞砸这个项目——有人看到我的逻辑有缺陷吗?更好:您是否看到在巨大的目录树上执行此操作的更可靠的可扩展方式?让我们假设修订控制不在讨论范围内(实际上是这样)。