Я пытаюсь удалить все файлы подкачки vim *.swp
и удалить их с подтверждением. find
Команда нашла файлы, но rm
говорит No such file or directory
с -i
опцией. Когда я жестко кодирую путь к файлу и просто использую, rm -i
то это, кажется, работает.
См. ниже
(doors)hobbes3@hobbes3 ~/Sites $ find mysite mysite_BAK -name *.swp -exec 'rm -i {}' \;
find: rm -i mysite/templates/.base.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.create.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.detail.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.list.html.swp: No such file or directory
(doors)hobbes3@hobbes3 ~/Sites $ rm -i mysite/templates/.base.html.swp
remove mysite/templates/.base.html.swp? n
Думаю, я что-то не так делаю с -exec
опцией. Есть предложения? Спасибо заранее!
решение1
Ошибка возникает из-занаходить, нетрм.
Причина в том, что вы написали это так, 'rm -i <file>'
это единственный аргумент. Это следует переписать:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
поэтому find получает несколько аргументов после "-exec" и обрабатывает первый из них как команду, а остальные - как аргументы команды.
решение2
ОБНОВЛЕННЫЙ ОТВЕТ:
Если вы используете bash версии >4.0, вы можете воспользоваться функцией globstar, это очень просто:
shopt -s globstar
rm -i **/*.swp
Это также работает с именами файлов, содержащими пробелы!
Часть shopt -s globstar
активирует рекурсивное **
сопоставление в bash. Вы можете вставить это в свой .bashrc
и быть счастливыми вечно.
СТАРЫЙ ОТВЕТ:
Мне обычно проще использовать простые инструменты в сочетании
Перейдите в каталог и затем:
rm -i `find . | grep .swp$`
его легче запомнить (если производительность не имеет значения)!
Предупреждение: используйте этот метод только в том случае, если имена ваших файлов не содержат пробелов.
решение3
На вашем месте я бы побежал,
find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"
Файл подкачки VIM заканчивается не только на .swp. Если .swp существует, VIM создаст .swo, затем .swn и т. д. Кроме того, файлы подкачки имеют префикс в виде точки (.), например, .file1.rb.swp
Другие способы найти и удалить файлы подкачки VIM без подтверждения (-i):
find some_dir -type f -name .\*.sw? | xargs rm
find some_dir -type f -name .\*.sw? -exec rm {} ";"
find some_dir -type f -name .\*.sw? -delete # -delete option does not work in Git Bash
Без "-type f" вы получите ошибку при удалении каталога. Кроме того, \
in .\*.sw?
делает его совместимым на нескольких платформах.