Сейчас я использую Debian 10 (XFCE ). Я нахожу XFCE очень надежным, и я могу без проблем использовать мусорную корзину и съемные носители, поэтому я не беспокоюсь об этом «предупреждающем» сообщении.
Я делюсь с вами изображением «предупреждающего» сообщения, но на испанском языке, может быть, это поможет вам, и кто-нибудь может объяснить, почему пользователь root продолжает показывать его.
ПС. Быстрый перевод :«Похоже, что gvfs недоступен, важные функции, включая поддержку корзины, съемных устройств и навигации по местоположению, не будут работать».
Вы можете использовать grep
дважды :a )для вывода списка всех файлов с cat
, затем b )отфильтроватьdog
-содержащие файлы. Используйте -l
и -L
соответственно, где -l
перечисляет имена файлов с совпадениями, а -L
имена файлов без совпадений:
grep -L 'dog' $(grep -l 'cat' <list of files>)
См.man grep
:
-L, --files-without-match
Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match.
-l, --files-with-matches
Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match.
Это возможное решение, если я правильно понял, что все файлы находятся в одном каталоге и их расширениеtxt
:
$ cat a.txt cat dog $ cat b.txt cat dog $ cat c.txt cat $ cat d.txt dog
Затем команда:
# scan the directory for txt files
$ find /dir -type f -name ".txt" | while IFS= read -r i; do
# if it's false that the file does match both 'cat' and 'dog'
# grep 'cat'
if ! [[ $(grep -wl 'cat' "$i") && $(grep -wl 'dog' "$i") ]]; then
grep -wl 'cat' "$i"
fi
done
c.txt
Параметр -l
в grep
полезен здесь, поскольку он останавливает сканирование после нахождения первого совпадения, поэтому файлы не анализируются полностью.
for f in *; do diff -q <(sort -u "$f") <(echo cat) >/dev/null && echo "$f"; done
Чтобы найти файлы в каталоге labels/, которые только содержат строку «cats
» в одной строке, вы можете сравнить хеш-суммы каждого из этих файлов с «правильной» хэш-суммой:
find labels -type f -exec sh -c 'for arg do [ "$(md5sum < "$arg")" = "54b8617eca0e54c7d3c8e6732c6b687a -" ] && printf "%s\n" "$arg"; done' findsh {} +
Работа по поиску файлов выполняется с помощью find labels -type f
, а фильтрация выполняется внутри части -exec sh -c '...' findsh {} +
. Эта внутренняя часть перебирает каждый входящий файл (, переданный ей find
, столько, сколько поместится в каждом вызове ), и запрашивает md5sum
контрольную сумму файла. Если контрольная сумма совпадает, то выведите имя файла.