удалить файлы в каталоге и распечатать имя удаленного файла - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу удалить файлы в каталоге, кроме определенного файла, и распечатать сообщение, если файлы удалены.

find . ! -name 'name' -type f -exec echo 'removed files:' rm -v -f {} +

Когда я запускаю эту команду, она печатает:

removed files: rm -v -f ./aaavl ./aaavlpo

Я хочупечатать путпуты как:

removed files:
./aaavl
./aaavlpo

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

возможно, это не лучший способ, но ...

1 - Сохраните имена файлов в формате .txt: find -name 'name' -type f -exec echo >> test.txt {} \;

2 после сохранения файлов, выполняющих удаление найденных файлов.!-name 'name' -type f -exec rm -f {} +

0 голосов
/ 26 сентября 2018

Просто используйте find в цикле Bash для изменения вывода.

Дано:

$ ls -1
file 1
file 2
file 3
file 4
file 5

Вы все еще можете выполнить цикл и отрицание с помощью find по желанию.Просто используйте Bash, чтобы удалить и сообщить:

$ find . ! -name *3 -type f | while read fn; do echo "removing: $fn";     rm "$fn"; done
removing: ./file 1
removing: ./file 2
removing: ./file 5
removing: ./file 4

$ ls -1
file 3

Этот цикл будет работать для имен файлов с пробелами, ЧЕМ \n.

Если существует возможность имен файлов с \n вих, используйте xargs с NUL разделителем:

$ find . ! -name *3 -type f -print0 | xargs -0 -n 1 -I% bash -c ' echo "%" ; rm "%" ;' 

и добавьте заголовок echo "removed files:" над петлей или xargs трубу по желанию.

...