Вы также можете использовать pidof. Ознакомьтесь с man pidof
или info pidof
. Например, запуск его в моей текущей настройке представляет следующее:
pidof chrome
3946 3202 3194 3175 3154 3137 3114 3103 3077 3024 3019 3012 3005 2998
Как предложил @Ijaz, вы также можете получить счет:
pidof chrome | wc -l
14
Моя идея:
sort checkums.txt> sorted_checksums.txt
md5sum * | sort> real_checksums.txt
join -o "2.2 1.2" sorted_checksums.txt real_checksums.txt | awk '$ 1! = $ 2'> rename_pairs.txt
cat rename_pairs.txt | xargs -L 1 echo mv
(Удалите echo
из xargs
, чтобы фактически переименовать файлы) ВНИМАНИЕ: это будет работать, только если в именах файлов нет пробелов. Вы можете использовать awk 'NF! = 2' sorted_checksums.txt real_checksums.txt
, чтобы проверить это, и если будет напечатана какая-либо строка, тогда вам нужно будет использовать что-то еще (может быть просто perl
или python
программа) для шагов 3 и 4.
Считайте контрольные суммы в ассоциативный массив, затем пройдитесь по файлам и переименуйте их по мере необходимости. Поместите переименованные файлы в отдельное дерево каталогов на случай перекрытия между новыми именами и старыми именами.
#!/bin/bash
mkdir renamed
typeset -A names
while read -r sum name; do
names[$sum]=$name
done <list.md5sum
for file in *; do
if [[ -f $file ]]; then
sum=$(md5sum <"$file"); sum=${sum%% *}
if [[ -n ${names[$sum]} ]]; then
mv -- "$file" "renamed/${names[$sum]}"
fi
fi
done
Прежде всего, я не собираюсь утверждать, что это самое глубокое решение, но вот один из способов сделать это.
Допустим, у вас есть файл с контрольной суммой и именами файлов под названием filelist.txt
, тогда вы можете использовать что-то вроде:
while read -r checksum fname; do for f in file*; do if [[ $checksum == $(md5sum "$f" | cut -d' ' -f1) ]]; then mv "$f" "$fname"; fi ; done ; done < filelist.txt
Я еще не тестировал полностью , это просто теоретически работает. Заменить там, где нужно:
#! /bin/bash
for II in *
do
if [ -f "$II" ]; then
TMPV=$(md5sum "$II")
MD="${TMPV%\ \ *}"
TMPV=$(grep "$MD" hashes.txt)
if [ ! -z "$TMPV" ]; then
FN="${TMPV#*\ \ }"
echo "Found: $II"
echo "MD5 is: $MD"
echo "Which matches $FN in hashes database"
echo "Will Rename $II TO $FN"
echo ""
# CAREFUL, RENAME CMD: mv "$II" "$FN"
fi;
fi;
done;
Как я уже сказал, не тестировал, но, похоже, на моем ящике это сработало.