Потому что wc
также считает новую строку \n
.
echo
добавляет символ новой строки в конец вывода, если не вызывается с опцией -n
.
Если у вас есть Bash или ksh:
#!/bin/bash
extensions=(c~ h~ bak)
for e in "${extensions[@]}"; do
find. -name "*.$e" -delete
done
Или замените -exec rm -- {} +
на -delete
, если у вашего find
нет последнего. Конечно, вы также можете сначала запустить пробный запуск без -delete
, чтобы увидеть файлы, которые будут удалены.
Приведенное выше действие приведет к удалению файлов во всех подкаталогах.Если вы хотите удалить файлы только в текущем каталоге (, а не в подкаталогах ), мы можем использовать rm
вместоfind
:
#!/bin/bash
extensions=(c~ h~ bak)
shopt -s nullglob
for e in "${extensions[@]}"; do
rm./*."$e"
done
Или просто
#!/bin/bash
shopt -s nullglob
rm -- *.c~ *.h~ *.bak
Более общая версия будет принимать каталог и расширения в качестве аргументов скрипта:
#!/bin/sh
dir=$1
shift
for e in "$@"; do
find "$dir" -name "*.$e" -delete
done
Вы бы запустили это с rmscript.sh /some/target/dir c~ h~ bak
.