Копировать файлы с префиксом Match и суффиксом с помощью скрипта оболочки

У вас получилось интересное трио. Обычно, когда вы входите в систему и запускаете ps без флагов, вы получаете оболочку входа и программу ps. По умолчанию ps покажет все процессы с одинаковым EUID и одним и тем же tty.

Таким образом, появление оболочки и ps не является чем-то необычным.

У вас есть две интересные вещи:

  • Родительский PID для первой оболочки - PID 1
  • У вас есть две оболочки

В моей системе идентификатор родительского процесса предназначен для процесса logind или процесса оконного терминала . Я не уверен, откуда у вас PPID 1.

Это как если бы вы вошли в систему, и ваша оболочка для входа - sh, после чего вы набрали bash.

0
22.01.2019, 04:50
3 ответа

Это можно сделать одним вкладышем:

grep '^aaa.*\.png$' list.txt | xargs -I '{}' cp '{}' destination_dir/

grepищет «aaa» в начале строки, за которой следует ноль или более символов и заканчивается «.png». Затем он передает это как список аргументов в cp, который перемещает их в «каталог назначения _»

.

Если вы находитесь в каталоге файлов, вы можете просто cpих с помощью:

cp aaa*.png destination_dir
1
28.01.2020, 02:14
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`

7
28.01.2020, 02:14

С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

0
28.01.2020, 02:14

Теги

Похожие вопросы