AIX создает каталог при копировании

Утилита grepищет внутри файлов строки, соответствующие регулярным выражениям.

То, что вы (кажется )хотите сделать, это перечислить все файлы в текущем каталоге, которые содержат0(ноль )в именах файлов и имеют суффикс имени файла .jpg. Для этого вы должны использовать что-то вроде

ls -l./*0*.jpg

или просто

echo./*0*.jpg

Первая часть шаблона, *0*, будет соответствовать любой строке, содержащей ноль, а последняя часть шаблона, .jpg, будет ограничивать результирующие имена файлов теми, которые заканчиваются этим суффиксом. ./означает «в этом каталоге» и действительно необходим только в том случае, если у вас есть имена файлов, начинающиеся с-(тире )(. В противном случае они могут быть неверно истолкованы как параметры командной строки )¹.

Расширение этого шаблона выполняется оболочкой перед вызовом ls, поэтому lsполучит расширенный список имен файлов, соответствующих шаблону, и перечислит их.

Обратите внимание, что шаблоны подстановки имен файлов не являются регулярными выражениями (, а только похожи на них ). grep, с другой стороны, берет одно или несколько регулярных выражений и ищет их в содержимом файлов.


Ответ на вопрос, найденный в комментариях:"Предупреждение" – это форма -нефатального диагностического вывода. Другой тип — это «ошибка», которая обычно является фатальной (, т. е. программа не может продолжать работу в обычном режиме и завершается после вывода сообщения об ошибке ).

Диагностические сообщения обычно не считаются частью стандартного вывода, который команда производит во время нормальной работы, и обычно создаются в специальном «выходном потоке» (в так называемом «стандартном потоке ошибок», а не в « стандартный поток вывода" ), чтобы его можно было проверить отдельно или отбросить, и чтобы он не мешал обычному выводу команды.

Однако в этом случае grepне может фактически показать данные, совпадающие с шаблоном, поскольку файл является двоичным и данные, скорее всего, непечатаемые, поэтому вместо этого он уведомляет вас о наличии match в файле с помощью сообщения Binary file IMG_2125.jpg matchesвместо (это на самом деле не диагностическое предупреждающее сообщение, как предполагает mikeserv).


¹ Обратите внимание, что если некоторые имена файлов содержат символы обратной косой черты, некоторые реализации echoбудут интерпретировать \n, \b... как escape-последовательности для расширения.

0
02.06.2021, 17:52
1 ответ

Одной из возможностей было бы использование tar-конвейера:

(cd ~user1/ && tar -c -p -f - bin/log) | (cd ~user2/ && tar -x -p -f -)

Это использует подоболочку для перехода к родительскому каталогу исходного местоположения, а затем указывает tarзаписать архив каталога «log» в стандартный вывод. Вторая подоболочка переходит в родительский каталог места назначения, а затем указывает tarизвлечь архив, поступающий через стандартный ввод канала. Команды tarобъединены в цепочку с &&для выполнения только в случае успешного выполнения соответствующей команды cd.

Вы можете проверить это, сказав второму tarпросто распечатать входящее содержимое; просто измените -xна -t. Использование -pс -tне имеет значения и не повредит:

(cd ~user1/ && tar -c -p -f - bin/log) | (cd ~user2/ && tar -t -p -f -)
3
28.07.2021, 11:27

Теги

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