Попытка удалить папку .git и «rm -r .git --force» не работает

Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:

Вы пишете

lst = [[1] * 4] * 3

Это эквивалентно:

lst1 = [1]*4
lst = [lst1]*3

Это означает, что lst - это список с 3 элемента, указывающие на lst1. Это означает, что две следующие строки эквивалентны:

lst[0][0] = 5
lst1[0] = 5

Поскольку lst[0] - это только lst1.

Чтобы получить желаемое поведение, вы можете использовать понимание списка:

lst = [ [1]*4 for n in xrange(3) ]

В этом случае выражение переоценивается для каждого n, что приводит к другому списку.

0
задан Alex Harvey 24 March 2019 в 11:43
поделиться

1 ответ

Анализ и объяснение:

Сообщение override r--r--r-- ...? появляется в некоторых версиях команды rm, когда вы пытаетесь удалить файл или файлы с помощью команды rm, у которых есть доступ для записи. удален.

Воспроизвести:

▶ mkdir -p foo/{bar,baz} ; touch foo/bar/qux 
▶ chmod -R -w foo 
▶ find foo -ls 
4305147410        0 dr-xr-xr-x    4 alexharvey       wheel                 128 24 Mar 18:19 foo
4305147412        0 dr-xr-xr-x    2 alexharvey       wheel                  64 24 Mar 18:19 foo/baz
4305147411        0 dr-xr-xr-x    3 alexharvey       wheel                  96 24 Mar 18:19 foo/bar
4305147413        0 -r--r--r--    1 alexharvey       wheel                   0 24 Mar 18:19 foo/bar/qux

Теперь, если вы попытаетесь удалить эти файлы, вас спросят, действительно ли вы хотите переопределить этот файловый режим:

▶ rm -r foo
override r-xr-xr-x  alexharvey/wheel for foo/baz? 

Обратите внимание, что если вы работаете в Mac OS X или другом варианте BSD, как это имеет место, то вы неправильно указали аргумент --force, добавив его в конец командной строки, где он будет интерпретироваться как имя дополнительный файл для удаления.

1116 Но даже если я исправлю это, -f все равно не сможет переопределить r-r-r--. Вместо этого вы увидите следующее:

▶ rm -rf foo       
rm: foo/baz: Permission denied
rm: foo/bar/qux: Permission denied
rm: foo/bar: Permission denied
rm: foo: Directory not empty

Исправление:

Чтобы исправить это, сначала восстановите разрешение на запись в папке:

▶ chmod -R +w foo

Тогда rm -r должен работать нормально:

▶ rm -r foo
▶ ls foo 
ls: foo: No such file or directory

См. Также:

0
ответ дан Alex Harvey 24 March 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: