Linux: Чому ls -R * .zip не знаходить поштові файли по дереву?


1

Я використовую DOS 22 роки, але я новачок у Linux. Так у Linux, коли я виконую

ls -R *.zip

Чому я отримую:

ls: * .zip: Немає такого файлу чи каталогу

Коли я перебуваю на вершині величезного дерева папок і файлів? Як і як мені це зробити

Dir /s *.zip

У Linux?


Я чую, що це можливо в оболонці завзяття (з подібним синтаксисом): ls ** / *. Zip
Ярослав Рахматуллін

Відповіді:


3

Спробуйте ls -R|grep .zipабо для повного шляху:

find .  -name '*.zip'

Це знайде будь-які файли, що закінчуються .zipу поточному каталозі та будь-яких підкаталогах.

Це здається трохи довше, але набагато потужніше, ніж dir /s *.zipспосіб вікон.


Гаразд - я геть. Я іноді використовую dir / s / a / b | find / i "blah", що концептуально те саме.
Люк Пуплетт

Саме так; grep відповідає рядку, або якщо ви використовуєте "grep -E 'blah", то ви можете використовувати в ньому регулярні вирази
Джастін

4

Щоб розгорнутись трохи вище за вищенаведеною відповіддю, в Linux підстановочні знаки розширюються оболонкою, що означає, що оболонка буде викликати команду зі списком відповідних імен файлів як аргументів. І оболонка виглядає лише в поточному каталозі для відповідності файлів (або в будь-якому каталозі, який ви вказали до підстановки). Наприклад, така команда, як:

ls *.zip

насправді перекладається на:

ls file1.zip file2.zip file3.zip

І, якщо .zipв поточному каталозі немає файлів, ім’я прямого файлу *.zipпередається команді, і в цьому випадку він не вподобає файл, який називається *.zip. (A *є юридичним символом у імені файлу Unix / Linux, btw). Тепер, якщо ви не хочете, щоб оболонка розширювала підстановку, але натомість, якщо ви хочете, щоб підказки передавались безпосередньо команді, яку ви викликаєте, вам доведеться укласти її в лапки. Це має цікавий ефект, оскільки така команда, як:

find . -name *.zip

дасть очікувані результати, якщо .zipу вашому поточному каталозі немає файлів (бачить команда find *.zip). Але якщо у вас є один або більше .zipфайлів у поточному каталозі, виконується виконання:

find . -name file1.zip file2.zip

яка не знайде збігів у жодних підкаталогах (якщо вони не будуть точно названі file1.zipабо file2.zipтощо). Тож мораль історії полягає в тому, що, використовуючи пошук, обов'язково використовуйте лапки навколо будь-якого імені файлу з підстановкою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.