Как исключить каталог в find.команда - PullRequest
1149 голосов
/ 18 ноября 2010

Я пытаюсь запустить команду find для всех файлов JavaScript, но как исключить конкретный каталог?

Вот код find, который мы используем.

for file in $(find . -name '*.js')
do 
  java -jar config/yuicompressor-2.4.2.jar --type js $file -o $file
done

Ответы [ 33 ]

0 голосов
/ 06 октября 2016

Я нашел предложения на этой странице, и многие другие страницы просто не работают в моей системе Mac OS X.Тем не менее, я нашел вариант, который работает для меня.

Основная идея состоит в том, чтобы искать Macintosh HD, но избегать обхода всех внешних томов, в основном это резервные копии Time Machine, резервные копии изображений, подключенные общие ресурсы иархивы, но без необходимости размонтировать их все, что часто нецелесообразно.

Вот мой рабочий скрипт, который я назвал "findit".

#!/usr/bin/env bash
# inspired by /2474280/kak-isklychit-katalog-v-find-komanda Danile C. Sobral
# using special syntax to avoid traversing. 
# However, logic is refactored because the Sobral version still traverses 
# everything on my system

echo ============================
echo find - from cwd, omitting external volumes
date
echo Enter sudo password if requested
sudo find . -not \( \
-path ./Volumes/Archive -prune -o \
-path ./Volumes/Boot\ OS\ X -prune -o \
-path ./Volumes/C \
-path ./Volumes/Data -prune -o \
-path ./Volumes/jas -prune -o \
-path ./Volumes/Recovery\ HD -prune -o \
-path ./Volumes/Time\ Machine\ Backups -prune -o \
-path ./Volumes/SuperDuper\ Image -prune -o \
-path ./Volumes/userland -prune \
\) -name "$1" -print
date
echo ============================
iMac2:~ jas$

Различные пути должны сделатьс внешними томами архивов, Time Machine, виртуальными машинами, другими подключенными серверами и т. д.В некоторых именах томов есть пробелы.

Хороший тестовый запуск - "findit index.php", потому что этот файл встречается во многих местах моей системы.С этим сценарием поиск по основному жесткому диску занимает около 10 минут.Без этих исключений это займет много часов.

0 голосов
/ 10 марта 2017

я хотел узнать количество каталогов, файлы в МБ только текущий каталог - и этот код делает именно то, что я хочу: -)

источник

- ...    2791037 Jun  2  2011 foo.jpg
- ... 1284734651 Mär 10 16:16 foo.tar.gz
- ...          0 Mär 10 15:28 foo.txt
d ...       4096 Mär  3 17:12 HE
d ...       4096 Mär  3 17:21 KU
d ...       4096 Mär  3 17:17 LE
d ...          0 Mär  3 17:14 NO
d ...          0 Mär  3 17:15 SE
d ...          0 Mär  3 17:13 SP
d ...          0 Mär  3 17:14 TE
d ...          0 Mär  3 19:20 UN

код

format="%s%'12d\n"

find . -type d -not -path "./*/*" | wc -l | awk -v fmt=$format '{printf fmt, " Anzahl Ordner  = ", $1-1}'
find . -type f -not -path "./*/*" | wc -l | awk -v fmt=$format '{printf fmt, " Anzahl Dateien = ", $1}'
  du . -hmS --max-depth=0 | awk -v fmt=$format '{printf fmt, " Groesse (MB)   = ", $1}'

примечание: дополнительный format="%s%'12d\n" необходим для awk для форматирования чисел.

результат

Anzahl Ordner  =            8
Anzahl Dateien =            3
Groesse (MB)   =        1.228
0 голосов
/ 25 апреля 2017

Не уверен, что это охватит все крайние случаи, но следующее будет довольно просто и просто попробовать:

ls -1|grep -v -e ddl -e docs| xargs rm -rf

Это должно удалить все файлы / каталоги из текущего каталога, кроме «ddls» и «docs». ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...