Предположим, что у меня есть каталог /home/smit/test. Внутри у меня есть много подкаталогов и файлов. Я хочу удалить только каталог /home/smit/test, а не его внутренний контент. Таким образом, файлы и подкаталоги /home/smit/test будут автоматически включены в /home/smit/?
Кроме того, в реальном случае у меня есть /usr/share/backgrounds/all/, который имеет много подкаталогов. и эти подкаталоги имеют много изображений. Я хочу удалить все подкаталоги, чтобы их содержимое было включено в /usr/share/backgrounds/all/. Я могу сделать это с помощью графического интерфейса, но я хочу сделать это с помощью удобного терминала. Как я могу это сделать?
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b для mv, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~ к их именам. Однако, если есть три или более файлов с одним и тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить к защите ваших файлов, проверьте содержимое.
Первый, простой случай прост; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с ., начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если вы хотите, выключите dotglob (он будет возвращаться к стандарту, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b для mv, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~ к их именам. Однако, если есть три или более файлов с одним и тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить к защите ваших файлов, проверьте содержимое.
Первый, простой случай прост; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с ., начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если вы хотите, выключите dotglob (он будет возвращаться к стандарту, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b для mv, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~ к их именам. Однако, если есть три или более файлов с одним и тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить к защите ваших файлов, проверьте содержимое.
Первый, простой случай прост; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с ., начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если вы хотите, выключите dotglob (он будет возвращаться к стандарту, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
В этих ситуациях существует риск перезаписывания файлов с тем же именем. Как упоминалось в @Arronical, вы можете избежать этого, используя флаг -b
для mv
, который заставляет любые идентично именованные файлы дифференцироваться путем добавления ~
к их именам. Однако, если есть три или более файлов с тем же именем, будут сохранены только первые и последние, поэтому прежде чем переходить на защиту ваших файлов, проверьте содержимое.
Первый простой случай - это просто; мы можем использовать оболочку glob. Однако это не приведет к перемещению скрытых файлов, поэтому, если у вас есть имена файлов, начинающиеся с .
, начните с включения dotglob
shopt -s dotglob
Затем вы можете запустить:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Если хотите, выключите dotglob
(он будет возвращаться к умолчанию по умолчанию, когда вы откроете новую оболочку):
shopt -u dotglob
Для второго (реального) случая мы будем использовать find
, который по умолчанию перемещает скрытые файлы:
Убедитесь, что вы находитесь в правильном месте.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Если это выглядит хорошо, запустите его без echo
, чтобы фактически перейти files
find -type f -exec mv -vb -- {} . \;
Затем найдите каталоги
find -type d
Если вы видите, что вы хотите удалить:
find -type d -delete
Это безопасно, так как это будет отказаться от удаления каталогов, которые все еще имеют содержимое.
-b
или --backup
для mv
, чтобы справиться с повторяющимися именами файлов, и сделать резервные копии исходных версий.
– Arronical
27 July 2017 в 12:44
find -type f -exec sudo mv -vb -- {} . \;
(поскольку mv
действия - это операции записи), но если нет, были ли ошибки разрешения? Хотели бы вы начать чат, чтобы выяснить, что происходит?
– Zanna
27 July 2017 в 13:10
find SOURCE -type f -exec mv -bt TARGET -- {} + && rm -rf SOURCE
.
– David Foerster
27 July 2017 в 19:14