Соберите файлы из нескольких различных каталогов и положите их на одно место

Из командной строки можно использовать fsck, чтобы сделать непосредственную дисковую проверку/sbin/fsck на большинстве дистрибутивов. Например:

% sudo /sbin/fsck -t ext4 /dev/sda1

Как предостережение: размонтируйте файловую систему сначала! Ввести man fsck и читайте об этом для получения дополнительной информации.

Иногда эта проверка может по-видимому выполнить чудеса с диском, но не задерживает дыхание. Это, кажется, плохой диск. SSD не очень надежен, по моему опыту.

3
08.01.2015, 01:10
2 ответа

Я предполагаю, что вы, по крайней мере, имеете их все в различных подкаталогах под одной родительской папкой. Что-то вроде ~/mybooks. Если это так, то вы можете сделать так:

find ~/mybooks -name '*.pdf' -or -name '*.epub' -exec mv -t ~/newdir {} +

Это приведет к тому, что все файлы или каталоги, имя которых заканчивается на .pdf или .epub в каталоге ~/mybooks и переместит их в каталог ~/newdir. Если у вас есть каталоги с именем, заканчивающимся на .pdf или , вы можете переместить их в каталог ~/newdir. epub, добавьте директиву -тип f, чтобы получить только файлы:

find ~/mybooks -type f -name '*.pdf' -or -name '*.epub' -exec mv -t ~/newdir {} +
4
27.01.2020, 21:19

Чтобы переместить все файлы с определенными расширениями в дереве каталогов (т. Е. В каталоге и его подкаталогах рекурсивно) в один каталог в zsh:

mv -i source/**/*.(pdf|epub) destination/

Каталог назначения уже должен существовать. Вы можете опустить часть source / , если хотите собирать файлы в текущем каталоге и его подкаталогах. Если вы хотите переместить все файлы независимо от их имени, но не каталоги:

mv -i source/**/*(.) destination/

В bash:

shopt -s extglob globstar
mv -i source/**/*.@(pdf|epub) destination/

Эти команды могут жаловаться на то, что командная строка слишком длинная, если у вас много файлов. В этом случае вы можете вызвать find вместо использования рекурсивной подстановки.

find source -name '*.pdf' -o -name '*.epub' -exec mv -i -t destination/ {} +
find source -type f -exec mv -i -t destination/ {} +

Если существующая структура каталогов содержит некоторую информацию, то вместо перемещения файлов вам может быть удобнее создать жесткие ссылки или символические ссылки .

Для создания жестких ссылок вызовите ln вместо mv -i . С жесткими ссылками каждый файл будет присутствовать в обоих местах одновременно. Если вы удалите либо исходный, либо новый файл, другой останется: два местоположения файла находятся на равных основаниях. Вы можете сказать, что файл имеет жесткие ссылки, потому что число во втором столбце вывода ls -l больше 1.

Чтобы создать символические ссылки, сначала перейдите в целевой каталог и вызовите ln -s , используя . (текущий каталог) в качестве цели. Символьная ссылка - это файл, в котором просто написано: «Вместо этого посмотрите этот файл». Если вы удалите символическую ссылку, это не повлияет на исходный файл. Если вы переместите или удалите исходный файл, символическая ссылка станет висящей (то есть она все еще там, но больше не указывает на файл).

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

find /some/directory -depth -type d -empty -delete
0
27.01.2020, 21:19

Теги

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