Я выпустил
ps aux | grep mtp
, который дал мне несколько процессов, связанных с mtp, и сравнил с установленной и отключенной камерой, чтобы получить конкретный процесс
, а затем
pkill -9 gvfsd-mtp
сделал свое дело.
Но я предполагаю, что приведенный выше ответ тоже будет работать:)
Немного длинное, но рабочее решение, которое должно работать в случаях, когда -execdir
недоступен:
$ tree
.
├── dir_one
│ ├── password.old
│ └── webvirtual
└── dir_two
└── password.old
$ find . -iname "*password.old" -exec dirname "{}" \; 2>/dev/null | while IFS= read -r directory; do
> [ -e "$directory"/webvirtual ] && continue || echo "$directory"
> done
./dir_two
Таким образом, все, что вам нужно сделать сейчас, это добавить > OLD.txt
в конце оператора done
для перенаправления вывода в файл
. Если команда dirname
недоступна, вы можете использовать следующий сценарий с каталогом в качестве аргумента.
#!/bin/sh
find "$1" -type f -iname "*password.old" -printf "%h\n" |
while IFS= read -r directory;
do
[ -e "$directory"/webvirtual ] && continue || echo "$directory"
done
Например:
$ ./find_missing_webvirtual.sh ./TESTDIR/
./TESTDIR/dir_two
Я бы сделал:
find . -path ./OLD -prune -o -name password.old \
! -execdir [ -e webvirtual ] \; -printf '%h\n'
-execdir
находится в GNU find
(начиная с 4.2.12 ( 2005)), sfind
и большинство BSD (откуда это взялось). -printf
специфичен для GNU. Вы можете заменить его на -execdir pwd \;
для других реализаций find
.
Если -execdir
недоступен:
find . -path ./OLD -prune -o -name password.old -exec sh -c '
for file do
dir=${file%/*}
[ -e "$dir/webvirtual" ] || printf "%s\n" "$dir"
done' sh {} +
Выше будет POSIX. В Solaris 10 и старше обязательно используйте стандартный sh
в / usr / xpg4 / bin
, а не в / bin
.