grep
не подходит для этого, используйте find
с -name
, чтобы указать имя файла, которое вы хотите получить,
find . -type f -name "CMakeList.txt" -print
Приведенная выше команда выполняет поиск для файла рекурсивно из текущей папки и всех подкаталогов ниже.
Предполагая, что вы просто хотите найти любой файл, чье имя совпадает с *~
или .*~
(, это обычно файлы резервных копий, оставленные редактором ), тогда этот единственный вызов find
сделает это за вас :
find /var/www/html/mypath/ -type f \( -name '*~' -o -name '.*~' \) -print
Вы можете вставить туда -maxdepth 6
, если считаете, что это имеет смысл:
find /var/www/html/mypath/ -maxdepth 6 -type f \( -name '*~' -o -name '.*~' \) -print
Чтобы удалить найденные файлы, просто добавьте -delete
в конец команды.
Если оболочка не может расширить шаблон подстановки имен файлов в список имен, он сохраняется как нерасширенный шаблон. Вот почему вы получаете результат, который получаете с помощью своего кода.
следующее делает то, что мне нужно:
#!/bin/sh
cd '/var/www/html/mypath/'
for i in `find '/var/www/html/mypath/' \( -name '*~' -o -name '.*~' \) -type f`; do
echo 'file to be removed: '$i
mv $i '/var/www/html/trashTest'
done