В по необходимости, как я могу удалить файлы из каталога в моей рабочей области, где файлы я хочу удаленный, не часть рабочей области?
У меня есть каталог в моей файловой системе с файлами, от которых это добирается по необходимости, но после некоторых выполненных процессов, это создает некоторые новые файлы в тех каталогах.
Существует ли по необходимости команда для удаления этих сгенерированных файлов, которые не являются частью моей рабочей области?
Это моя быстрая реализация p4 nothave
.
#!/bin/bash
#
# List files present, but not in perforce.
tmpd="$(mktemp -d /tmp/nothave.XXXXXXXX)"
trap "rm -rf $tmpd" EXIT HUP INT QUIT TERM
p4 have | awk -F' - ' '{print $2}' | sort >$tmpd/have.txt
root=$(p4 info | awk -F': ' '$1=="Client root"{print $2}')
find $root -type f | sort >$tmpd/find.txt
comm -13 $tmpd/have.txt $tmpd/find.txt
Будет создан список файлов, которые затем можно передать в xargs rm
для удаления. Однако будьте осторожны, чтобы проверить список перед удалением. Вы можете найти там то, чего не ожидали.
Вы не можете изменять/удалять файлы, которые не являются частью вашего рабочего пространства, из perforce. Для этого вам придется писать внешние скрипты.
Это немного неудобно в PowerShell, потому что p4 отправляет сообщение «Невозможно найти файл» в поток ошибок, а не в стандартный поток вывода.
ps > $error.clear()
ps > dir | %{p4 fstat -T "haveRev" $_} 2>$null
ps > $error | %{$_.Exception.ToString().Split()[1]} | %{del $_}
Вторая строка должна выдавать такие ошибки, как «FILENAME.EXT - таких файлов нет».
Это может быть немного нестабильно, если у вас есть что-то, кроме этих исключений в потоке ошибок, поэтому остерегаться.
Вы можете использовать p4 nothave
, чтобы определить файлы, которые не управляются perforce. В зависимости от результатов p4 nothave
вы можете сделать p4 nothave | xargs rm
, но не забудьте проверить результат p4 nothave
, прежде чем выполнять это (чтобы случайно не удалить что-то важное).