Как сделать скрипт Bash для поиска неиспользуемых изображений в проекте? - PullRequest
2 голосов
/ 17 ноября 2011

Как создать сценарий оболочки Bash, который может идентифицировать все файлы .jpg, .gif и .png, а затем определить, какие из этих файлов не связаны через url (), href или src в любом текстовом файле в папке?

Вот что я начал, но в итоге получаю обратное тому, что хочу. Я не хочу знать изображения, на которые есть ссылки, но не имеющие ссылки (они также называются "осиротевшими"):

# Change MYPATH to the path where you have the project
find MYPATH -name *.jpg -exec basename {} \; > /tmp/patterns
find MYPATH -name *.png -exec basename {} \; >> /tmp/patterns
find MYPATH -name *.gif -exec basename {} \; >> /tmp/patterns

# Print a list of lines that reference these files
# The cat command simply removes coloring
grep -Rf /tmp/patterns MYPATH | cat

# great -- but how do I print the lines of /tmp/patterns *NOT* listed in any given
# *.php, *.css, or *.html?

Ответы [ 3 ]

8 голосов
/ 18 ноября 2011

С помощью drysdam я создал этот скрипт Bash, который я называю orphancheck.sh и вызываю с помощью "./orphancheck.sh myfolder".

#!/bin/bash

MYPATH=$1

find "$MYPATH" -name *.jpg -exec basename {} \; > /tmp/patterns
find "$MYPATH" -name *.png -exec basename {} \; >> /tmp/patterns
find "$MYPATH" -name *.gif -exec basename {} \; >> /tmp/patterns

for p in $(cat /tmp/patterns); do
    grep -R $p "$MYPATH" > /dev/null || echo $p;
done
4 голосов
/ 05 июня 2012

Я немного опоздал на вечеринку (я сам нашел эту страницу, когда искал ответ), но в случае, если это кому-то пригодится, вот слегка измененная версия, которая возвращает путь с именем файла (и ищетеще несколько типов файлов):

#!/bin/bash

if [ $# -eq 0 ]
  then
    echo "Please supply path to search under"
    exit 1
fi
MYPATH=$1

find "$MYPATH" -name *.jpg > /tmp/patterns
find "$MYPATH" -name *.png >> /tmp/patterns
find "$MYPATH" -name *.gif >> /tmp/patterns
find "$MYPATH" -name *.js >> /tmp/patterns
find "$MYPATH" -name *.php >> /tmp/patterns

for p in $(cat /tmp/patterns); do
    f=$(basename $p);
    grep -R $f "$MYPATH" > /dev/null || echo $p;
done

Важно отметить, однако, что вы можете получить ложные срабатывания, просто посмотрев на код статически, как это, потому что код может динамически создавать имя файла, на которое затем ссылаются (и ожидается, что будет существовать).Поэтому, если вы слепо удаляете все файлы, чьи пути возвращаются этим сценарием, без каких-либо знаний о вашем проекте, вы можете пожалеть об этом.

3 голосов
/ 17 ноября 2011
ls -R *jpg *gif *png | xargs basename > /tmp/patterns
grep -f /tmp/patterns *html

В первой строке (рекурсивно - ваша проблема задана неверно, поэтому я подумал, что буду немного общей), чтобы найти все изображения и удалить часть каталога, используя basename. Сохраните это в списке шаблонов. Затем grep, используя этот список во всех html-файлах.

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