У меня есть каталог, содержащий файлы с именами
rho_0.txt
rho_5000.txt
rho_10000.txt
rho_150000.txt
rho_200000.txt
и так далее. Я хотел бы удалить все те, которые кратны 5000.
Я попробовал следующее:, printf 'rho_%d.txt\n' $(seq 5000 10000 25000) | rm
но это дало мне ответ rm: missing operand
.
Есть ли другой способ сделать это?
ls
сначала.Ответы:
Вам не нужен цикл или дополнительные команды, где у вас есть
Bash Shell Brace Expansion
.Объяснение :
{start..end..step}
.-f
Игнорировать приглашение на несуществующие файлы.Ps Чтобы сохранить безопасность и проверить, какие файлы будут удалены, сначала выполните тест с:
источник
rm
не читает со стандартного ввода. Вы могли бы сделать:Я включаю
-i
опцию, чтобыrm
запросить перед удалением, чтобы вы могли проверить поведение. Если вы уверены, что делаете то, что хотите, вы можете опустить эту опцию.Изменить: В качестве альтернативы, вы можете сделать:
Эта форма может быть более знакома, если вы занимались программированием.
источник
Вы не можете передать в программу, как если бы содержимое канала было аргументами. Это отправлено через стандартный ввод.
Вы должны использовать xarg для этой цели:
но сначала вы можете попробовать с помощью echo проверить, все ли так, как вы намереваетесь:
источник
seq
есть опция-f
/,--format
вы можете использовать ее вместо обходного путиprintf
и подстановки команд.Кто-то исправит меня, если я ошибаюсь, но если все файлы, которые начинаются с,
rho_
имеют эту форму, разве это не эквивалентноПоскольку число (отличное от 0) кратно 5000 тогда и только тогда, когда оно заканчивается в 0000 или 5000.
(0 является особым случаем, поскольку он кратен 5000, но обычно записывается без дополнительных начальных нулей. Если вы не намеревались включать 0, выньте его из приведенной выше строки.)
Конечно, это следует использовать, только если все
rho_*.txt
файлы в вашем каталоге имеют желаемую форму. Не используйте его, если ваш каталог также содержитrho_please_dont_delete_me_5000.txt
.(Замечание по математике: это работает именно потому, что все главные факторы 5000, а именно 2 и 5, также являются главными факторами базы, на которой мы работаем, 10. Эквивалентно, есть достаточно большая сила 10 (а именно 10000), которая равна делится на 5000. Нет аналогичного трюка для сопоставления всех тех, которые кратны 3000.)
источник