Я собрал скрипт, чтобы сделать некоторые файловые операции для меня. Я использую подстановочный оператор *
для применения функций ко всем файлам типа, но есть одна вещь, которую я не понимаю. Я могу unzip
все файлы в папке, как это
unzip "*".zip
Тем не менее, чтобы удалить все почтовые файлы впоследствии, мне нужно сделать
rm *.zip
То есть он не хочет кавычек. Разархивирование, с другой стороны, не работает, если я просто даю ему * (предупреждает, что «файлы не были сопоставлены»).
Почему это отличается? Мне кажется, это точно такая же операция. Или я использую подстановочный знак неправильно?
Знакомство с подстановочным знаком в Unix на самом деле не относится к этому, и я не смог найти что-либо в rm
или zip
документах.
Я использую терминал на Mac (Yosemite).
unzip
применяет глобус к содержимому архива; вы не можете получить их из Bash с подстановочным знаком. (Вам нужно `` для f in unzip -l archive.zip
; do ... done`)
unzip
что глобусы должны совпадать внутри одного zip-файла. Но это другое; Я на самом деле пытался unzip '*.zip'
в каталоге с несколькими файлами ZIP, и он извлекает все файлы из всех ZIP. Как я уже сказал, супер странно. tar
не имеет никакого режима работы, подобного этому.
unzip
мог бы сделать это без обычногоfor f in *.zip;do...done
цикла оболочки. Такой странный не-Unix-подобный интерфейс командной строки.