Используйте.
netstat -anp | grep ':6016'
Это даст вам pid процесса, подключенного к порту. Затем используйте
ps aux | grep
, чтобы получить имя пользователя, под которым запущен процесс.
Чтобы сэкономить на арифметике в вашем скрипте, вы можете просто взять размер конкатенации файлов:
cat *.tiff | wc
Ядро UN *X будет сотрудничать с вами, чтобы сделать это столь же эффективным, как и измерение размеров файлов по отдельности.
size=$(wc -c < ${i})
Это не очень умный способ получить размер файла. Запуск wc
таким образом потребует чтения всего файла, что на самом деле совершенно не нужно, поскольку все, что вам нужно, это размер, который файловая система уже знает и может сообщить вам.
Это смягчается тем фактом, что вы копируете файл впоследствии, и поэтому его необходимо прочитать в любом случае. Файл среднего размера -, вероятно, останется в кеше в течение всего времени, поэтому операции чтения фактически не попадают на диск. Но все же, было бы разумно просто прочитать размер.
С помощью утилит GNU вы можете получить размер файла с помощью stat -c %s "$filename"
. К сожалению, параметры stat
в других системах отличаются, и я не думаю, что есть лучший, более портативный способ (, кроме запуска Perl )
cp -v ${i} $out | sleep 1 | echo -ne "$size%\033[0K\r"
Здесь конвейер кажется странным. cp
не производит никакого вывода (на стандартный вывод ), по крайней мере, без -i
, поэтому нечего передавать. Даже если бы это было так,sleep
ничего не читает, поэтому любой вывод из cp
будет потрачен впустую. То же самое происходит между sleep
и echo
. Это в основном полная противоположность тому, для чего обычно используются конвейеры, но это приводит к тому, что все команды выполняются параллельно, и оболочка ожидает завершения всех из них, поэтому для запуска конвейера требуется не менее одной секунды. независимо от того, насколько быстрой в противном случае была бы копия.
Если вы хотите суммировать размеры файлов, возможно, вам понадобится арифметическое расширение оболочки $((.. ))
. Итак, без лишних снов:
dest=/path/to/destination
total=0
for file in *.tiff; do
size=$(stat -c %s "$file");
printf "current %d total %d\n" "$size" "$((total += size))"
cp -- "$file" "$dest"
done
Можно суммировать с +=
, если переменная объявлена как целое:
$ declare -i size
$ size+=100; echo "$size"
100
$ size+=200; echo "$size"
300
Ваш скрипт (с правильными расширениями переменных процитирован):
#!/bin/bash
input_folder=./a/b/c
output_folder=./d/e/f
declare -i size
for i in "$input_folder"/*; do
size+=$(wc -c < "${i}")
cp -v "${i}" "$output_folder" | sleep 1 | echo -ne "$size\033[0K\r"
done
Просто суммируйте отдельные размеры и echo
потом.
#!/bin/bash
input_folder=/a/b/c
output_folder=/d/e/f
cd $input_folder
size_sum=0
for i in *.tiff; do
size=$(wc -c < ${i})
size_sum=$((size_sum + size))
cp -v ${i} $out | sleep 1
done
echo ${size_sum}