У вас получилось интересное трио. Обычно, когда вы входите в систему и запускаете ps без флагов, вы получаете оболочку входа и программу ps. По умолчанию ps покажет все процессы с одинаковым EUID и одним и тем же tty.
Таким образом, появление оболочки и ps не является чем-то необычным.
У вас есть две интересные вещи:
В моей системе идентификатор родительского процесса предназначен для процесса logind или процесса оконного терминала . Я не уверен, откуда у вас PPID 1.
Это как если бы вы вошли в систему, и ваша оболочка для входа - sh, после чего вы набрали bash.
Это можно сделать одним вкладышем:
grep '^aaa.*\.png$' list.txt | xargs -I '{}' cp '{}' destination_dir/
grep
ищет «aaa» в начале строки, за которой следует ноль или более символов и заканчивается «.png». Затем он передает это как список аргументов в cp
, который перемещает их в «каталог назначения _»
Если вы находитесь в каталоге файлов, вы можете просто cp
их с помощью:
cp aaa*.png destination_dir
cp aaa*.png /some/destdir
Это сопоставит все имена файлов, начинающиеся со строки aaa
и заканчивающиеся строкой .png
, и скопирует их все в каталог /some/destdir
. *
будет соответствовать любому количеству любых символов в середине имени.
Это не удалось бы, если бы у вас было много тысяч файлов, соответствующих шаблону, поскольку сгенерированный список был бы слишком длинным.
В этом случае используйте что-то вроде следующего цикла:
for name in aaa*.png; do
cp "$name" /some/destdir
done
Это приведет к копированию файлов один за другим.
Более эффективным методом для многих тысяч файлов было бы (использование GNU cp
с его -t
опцией):
find. -maxdepth 1 -type f -name 'aaa*.png' -exec cp -t /some/destdir {} +
Или (без GNUcp
):
find. -maxdepth 1 -type f -name 'aaa*.png' -exec sh -c 'cp "$@" /some/destdir' sh {} +
Эта последняя команда find
найдет все обычные файлы(-type f
)только в текущем каталоге (из-за -maxdepth 1
), чьи имена соответствуют шаблону aaa*.png
, и для их пакетов она вызовет короткий в сценарии оболочки строки -. Сценарий оболочки с короткой строкой -просто скопирует файлы в текущем пакете (, что будет разумным и управляемым количеством файлов )в каталог назначения.
Подробнее о find
использовании-exec
:Понимание опции -exec команды `find`
Сfind
:
find. -maxdepth 1 -type f -name aaa\*.png -exec cp {} destination \;
.
указывает текущий каталог.
-maxdepth 1
указывает ему искать только в текущем каталоге
type -f
приказывает искать файлы
-name aaa\*.png
указывает файлы, начинающиеся с aaa
и заканчивающиеся на .png
-exec cp {} destination \;
копирует файлы в каталог с именем destination
.
Моя среда требует, чтобы я выбрался из *
с помощью \
. Возможно, вам это не потребуется, поэтому вы можете просто использоватьaaa*.png