Как исключить каталог в find. команда

function assignFilePreviews() {
      $( 'input[data-previewable=\"true\"]' ).change(function() {
          var prvCnt = $(this).attr('data-preview-container');
          if(prvCnt) {
            if (this.files && this.files[0]) {
              var reader = new FileReader();
              reader.onload = function (e) {
                var img = $('<img>');
                img.attr('src', e.target.result);
                img.error(function() {
                  $(prvCnt).html('');
                });
                $(prvCnt).html('');
                img.appendTo(prvCnt);
              }
              reader.readAsDataURL(this.files[0]);
          }
        }
      });
    }
$(document).ready(function() {
     assignFilePreviews(); 
});

HTML

<input type="file" data-previewable="true" data-preview-container=".prd-img-prv" /> <div class = "prd-img-prv"></div>

Это также обрабатывает случай, когда выбран файл с недопустимым типом (например, pdf)

1159
задан leiyc 4 September 2018 в 04:39
поделиться

2 ответа

хороший прием для предотвращения печати сокращенных каталогов должен использовать -print (работы для -exec также) после правой стороны -or после -prune. Например...

find . -path "*/.*" -prune -or -iname "*.j2"

распечатает путь всех файлов под текущим каталогом с '.j2" расширение, пропуская все скрытые каталоги. Аккуратный. Но это также распечатает печать полный путь каждого каталога, который каждый пропускает, как отмечено выше. Однако следующее не делает...

find . -path "*/.*" -prune -or -iname "*.j2" -print

, потому что логически существует скрытое -and после -iname оператор и перед - печать. Это связывает его с правильной частью -or пункт из-за булева порядка операций и ассоциативности. Но в документах говорится, что существует скрытое -print если это (или любой из его кузенов... -print0, и т.д.), не определяется. Итак, почему левая часть не имеет -or печать? По-видимому (и я не понял это от своего первого чтения страница справочника), который верен если там нет никакого -print - или -exec ГДЕ УГОДНО, в этом случае, - печать логически опрыснута вокруг таким образом, что все печатается. Если даже ОДИН print - операция стиля выражается в каком-либо пункте, все те скрытые логические единицы уходят, и Вы получаете только, что Вы определяете. Теперь откровенно говоря, я, возможно, предпочел, чтобы это наоборот, но тогда find только с описательными операторами ничего, по-видимому, не делало, таким образом, я предположу, что это имеет смысл как есть. Как упомянуто выше, это все работает с [1 118] также, таким образом, следующее дает полное ls -la список для каждого файла с требуемым внутренним абонентом, но не список первого уровня каждого скрытого каталога...

find . -path "*/.*" -prune -or -iname "*.j2" -exec ls -la -- {} +

Для меня (и другие на этом потоке), find синтаксис становится довольно барочным довольно быстро, таким образом, я всегда добавляю parens, чтобы удостовериться, что я знаю то, что связывает с тем, что, таким образом, я обычно создаю макрос для способности типа и формирую все такие операторы как...

find . \( \( ... description of stuff to avoid ... \) -prune \) -or \
\( ... description of stuff I want to find ... [ -exec or -print] \)

трудно пойти не так, как надо путем установки мира в две части этот путь. Я надеюсь, что это помогает, хотя это кажется маловероятным для любого для чтения вниз в 30+th, отвечают и проголосовать за него, но можно надеяться.:-)

5
ответ дан 19 December 2019 в 20:14
поделиться

Вместо:

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

... и так как Вы не определяете, какой подкаталог Вы хотите исключить, Вы могли использовать:

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

Этот синтаксис исключит все подкаталоги.

Смотрят на пример ниже: в соответствии с моим tmp каталогом у меня есть огромный подкаталог "архива", который содержит 17000-4640=12360 файлы. И этот каталог расположен на медленном NFS. В то время как 1-й синтаксис сканирует подкаталог "архива" и работает плохо, 2-й синтаксис только сканирует "*pdf" файлы, содержавшиеся в моем текущем dir, и работает... не настолько плохо.

[tmp]$ time (find . -name "*pdf" | wc -l)
17000

real    0m40.479s
user    0m0.423s
sys     0m5.606s

[tmp]$ time (find *pdf -maxdepth 0 -name "*pdf" | wc -l)
4640

real    0m7.778s
user    0m0.113s
sys     0m1.136s

, Что 2-й синтаксис довольно интересен: в следующем примере я хочу проверить, существует ли файл or60runm50958.pdf и составляет больше чем 20 старых минут. Лично убедитесь, как 2-й синтаксис более эффективен. Это вызвано тем, что это старается не сканировать подкаталог архива.

[tmp]$ time find . -name or60runm50958.pdf -mmin +20
./or60runm50958.pdf

real    0m51.145s
user    0m0.529s
sys     0m6.243s

[tmp]$ time find or60runm50958.pdf -maxdepth 0 -name or60runm50958.pdf -mmin +20
or60runm50958.pdf

real    0m0.004s
user    0m0.000s
sys     0m0.002s
0
ответ дан 19 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: