Mercurial > pkg
comparison previous-work/more_control_helpers/bin/grep_all_regular_files_for @ 1:d6bef198ae71
add work by Matthias S. Benkmann which is the inspiration for this project.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 08 Jan 2013 11:45:01 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:0b7a589f6e9a | 1:d6bef198ae71 |
---|---|
1 #!/bin/bash | |
2 # Copyright (c) 2004 Matthias S. Benkmann <article AT winterdrache DOT de> | |
3 # You may do everything with this code except misrepresent its origin. | |
4 # PROVIDED `AS IS' WITH ABSOLUTELY NO WARRANTY OF ANY KIND! | |
5 | |
6 #The following list should contain the mount points of all filesystems | |
7 #that are to be scanned as a space-separated list within parentheses. | |
8 #/ will usually be in this list and if you have /usr | |
9 #on a separate partition, it will also be in this list. | |
10 #Mount points whose filesystems are special, such as procfs or sysfs must | |
11 #not be in this list. While a simple find on those special filesystems should | |
12 #be harmless, operations such as "-exec grep something" are NOT SAFE and may | |
13 #have HARMFUL SIDE-EFFECTS, especially when performed as root. | |
14 fs_to_scan=(/) | |
15 | |
16 #Files with a path prefix found in the following list are ignored. As the | |
17 #main function of this script is to help you find files that contain | |
18 #hardwired paths to /tools or other unwanted references to | |
19 #your build system, you will usually prune any directories that don't contain | |
20 #files of interest, such as /tools (whose files naturally refer to /tools) | |
21 #and your package users' home directories (which may also test positive if | |
22 #you have unpacked and configured sources lying around). | |
23 #NOTE: The LFS-6.0 book uses a ramfs mounted on /dev and with that setup | |
24 #/dev does not need to be in the prune list. But since there is no requirement | |
25 #that /dev have its on filesystem it's better to prune it explicitly. | |
26 prune_prefixes=(/home /usr/src /dev /tools) #NO TRAILING SLASHES!!! | |
27 | |
28 if [ $# -lt 1 -o "$1" = "--help" ]; then | |
29 echo 1>&2 | |
30 echo 1>&2 'USAGE: '"${0##*/}"' <grep-commands>' | |
31 echo 1>&2 | |
32 echo 1>&2 ' grep -l <grep-commands> -- <file>' | |
33 echo 1>&2 ' will be executed for each *regular file* <file>' | |
34 echo 1>&2 ' ATTENTION! If you override the -l switch with a switch that makes grep' | |
35 echo 1>&2 ' output all individual matches rather than just the matching files,' | |
36 echo 1>&2 ' then DO NOT redirect output to a file that is in a directory that will be' | |
37 echo 1>&2 ' scanned, or you risk creating an endless loop that will cause your' | |
38 echo 1>&2 ' output file to grow till your disk is full.' | |
39 echo 1>&2 | |
40 exit 1 | |
41 fi | |
42 | |
43 #suppress ugly debug output from shell | |
44 trap ':' SIGPIPE | |
45 | |
46 #construct find commands that match the prune_prefixes. Each prefix will be | |
47 #matched as -path <prefix> -or -path <prefix>/* | |
48 #so that the directory itself and all subdirectories are matched. | |
49 y=(\( -false) | |
50 for ((i=0; $i<${#prune_prefixes[@]}; i=$i+1)) | |
51 do | |
52 y[${#y[@]}]='-or' | |
53 y[${#y[@]}]=-path | |
54 y[${#y[@]}]="${prune_prefixes[$i]}" | |
55 y[${#y[@]}]='-or' | |
56 y[${#y[@]}]=-path | |
57 y[${#y[@]}]="${prune_prefixes[$i]}/*" | |
58 done | |
59 y[${#y[@]}]=')' | |
60 | |
61 cmd_pre=(-type f -exec grep -l) | |
62 cmd_post=(-- {} \;) | |
63 | |
64 #In the following find command, the part | |
65 # -not ( ( "${y[@]}" -prune ) -or "${y[@]}" ) | |
66 #is responsible for preventing the files that match prune_prefixes from | |
67 #being processed. The 2nd "${y[@]}" may seem redundant, but it isn't, because | |
68 #-prune has no effect and is always false when -depth is used (which someone | |
69 #might do in the future). | |
70 #The -true before "$@" ensures that -depth can be passed as 1st parameter | |
71 #of $cmd_pre (should someone change it in the future). | |
72 find "${fs_to_scan[@]}" -xdev -noleaf \ | |
73 -not \( \( "${y[@]}" -prune \) -or "${y[@]}" \) \ | |
74 -and \( -true "${cmd_pre[@]}" "$@" "${cmd_post[@]}" \) |