linux - Comment exclure un répertoire dans find . command

Mots clés : linuxshellfindlinux

meilleur 5 Réponses linux - Comment exclure un répertoire dans find . command

vote vote

91

find -name "*.js" -not -path "./directory/*" 
vote vote

86

find . -path ./misc -prune -o -name '*.txt' -print 
find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print 
find . -type d -name node_modules -prune -o -name '*.json' -print 
vote vote

76

find build -not \( -path build/external -prune \) -name \*.js # you can also exclude multiple paths find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js 
vote vote

70

To ignore a directory and the files under it, use -prune 
---------------------------------------------- # of files/dirs in level one directories .performance_test/prune_me     702702     .performance_test/other        2          ----------------------------------------------  > find ".performance_test" -path ".performance_test/prune_me" -prune -o -exec bash -c 'echo "$0"' {} \; .performance_test .performance_test/other .performance_test/other/foo   [# of files] 3 [Runtime(ns)] 23513814  > find ".performance_test" -not \( -path ".performance_test/prune_me" -prune \) -exec bash -c 'echo "$0"' {} \; .performance_test .performance_test/other .performance_test/other/foo   [# of files] 3 [Runtime(ns)] 10670141  > find ".performance_test" -not -path ".performance_test/prune_me*" -exec bash -c 'echo "$0"' {} \; .performance_test .performance_test/other .performance_test/other/foo   [# of files] 3 [Runtime(ns)] 864843145 
#!/bin/bash  dir='.performance_test'  setup() {   mkdir "$dir" || exit 1   mkdir -p "$dir/prune_me/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/w/x/y/z" \     "$dir/other"    find "$dir/prune_me" -depth -type d -exec mkdir '{}'/{A..Z} \;   find "$dir/prune_me" -type d -exec touch '{}'/{1..1000} \;   touch "$dir/other/foo" }  cleanup() {   rm -rf "$dir" }  stats() {   for file in "$dir"/*; do     if [[ -d "$file" ]]; then       count=$(find "$file" | wc -l)       printf "%-30s %-10s\n" "$file" "$count"     fi   done }  name1() {   find "$dir" -path "$dir/prune_me" -prune -o -exec bash -c 'echo "$0"'  {} \; }  name2() {   find "$dir" -not \( -path "$dir/prune_me" -prune \) -exec bash -c 'echo "$0"' {} \; }  name3() {   find "$dir" -not -path "$dir/prune_me*" -exec bash -c 'echo "$0"' {} \; }  printf "Setting up test files...\n\n" setup echo "----------------------------------------------" echo "# of files/dirs in level one directories" stats | sort -k 2 -n -r echo "----------------------------------------------"  printf "\nRunning performance test...\n\n"  echo \> find \""$dir"\" -path \""$dir/prune_me"\" -prune -o -exec bash -c \'echo \"\$0\"\'  {} \\\; name1 s=$(date +%s%N) name1_num=$(name1 | wc -l) e=$(date +%s%N) name1_perf=$((e-s)) printf "  [# of files] $name1_num [Runtime(ns)] $name1_perf\n\n"  echo \> find \""$dir"\" -not \\\( -path \""$dir/prune_me"\" -prune \\\) -exec bash -c \'echo \"\$0\"\' {} \\\; name2 s=$(date +%s%N) name2_num=$(name2 | wc -l) e=$(date +%s%N) name2_perf=$((e-s)) printf "  [# of files] $name2_num [Runtime(ns)] $name2_perf\n\n"  echo \> find \""$dir"\" -not -path \""$dir/prune_me*"\" -exec bash -c \'echo \"\$0\"\' {} \\\; name3 s=$(date +%s%N) name3_num=$(name3 | wc -l) e=$(date +%s%N) name3_perf=$((e-s)) printf "  [# of files] $name3_num [Runtime(ns)] $name3_perf\n\n"  echo "Cleaning up test files..." cleanup 
vote vote

55

find / -name MyFile ! -path '*/Directory/*' 

Questions similaires