Вы можете использовать netstat -tnlp
для вывода списка всех открытых портов TCP. netstat -tunlp
для вывода списка портов TCP и UDP.
Не зацикливать вывод find
. Это неэлегантно (цикл не начнет свою первую итерацию, пока не будут найдены все пути )и опасно (найденные пути будут разбиты на пробелы, табуляции и новые строки, и оболочка также попытается их расширить как шаблоны подстановки имен файлов ).
Вместо этого (все это предполагает, что вы не хотите копировать найденные файлы, если есть конфликт имен):
find fs282/mirror -type f -iname '*.jpeg' -exec sh -c '
for pathname do
if [ -e "jpegs/${pathname##*/}" ]; then
printf "%s\n" "${pathname##*/}"
else
cp "$pathname" jpegs/
fi
done' sh {} + | sort -u
Здесь используется find
в качестве генератора пути для скрипта в строке -. find
передаст скрипту найденные пути, и он будет перебирать их с каждым путем в $pathname
. Сценарий проверяет, существует ли компонент имени файла пути в каталоге jpegs
, и если это так, он печатает имя файла в конце пути в стандартный вывод. Если имя файла не существует в jpegs
, он копирует файл.
Замена параметра ${pathname##*/}
удаляет все, начиная с начала $pathname
до последнего символа /
включительно.], оставляя только компонент имени файла в конце.
sort -u
в конце возьмет все имена файлов, напечатанные строковым сценарием -, и отсортирует их, удаляя дубликаты.
Другой подход:
find fs282/mirror -type f -iname '*.jpeg' \
! -exec sh -c '[ -e "jpegs/${1##*/}" ] && printf "%s\n" "${1##*/}"' sh {} ';' \
-exec cp {} jpegs ';' | sort -u
Это, по существу, одно и то же, но сформулировано совершенно иначе.
С помощью короткого скрипта в строке -проверяется, существует ли имя файла под jpegs
, и если да, то имя файла печатается (, а затем сортируется )и find
продолжается со следующей файл. Если он не существует, файл копируется.
Связанные: