ls или dir - ограничить количество возвращаемых имен файлов - PullRequest
4 голосов
/ 23 июня 2011

Есть ли способ ограничить количество имен файлов, которые будут возвращены с помощью команды ls или dir? Я на Windows-машине с Cygwin, так что любая команда подойдет.

У меня есть каталог с более чем 1 миллионом документов, которые мне нужно объединить в подпапки. Я хочу написать простой скрипт, который бы перечислял первые 20 000 или около того, перемещал их в подпапку, а затем повторял на следующих 20 000. Я ожидаю, что у ls или dir будет возможность перечислять только определенное количество файлов, но я не могу найти способ сделать это.

Мой другой вариант - распечатать имена файлов в текстовый файл и проанализировать их, чтобы сделать ходы. Похоже, что должно быть более простое решение.

Ответы [ 2 ]

7 голосов
/ 23 июня 2011

Если вы используете cygwin, вы можете использовать команду head, например:

ls | head -20000

, чтобы перечислить первые 20 тыс.

Если вы хотите переместитьпакет в 1 командной строке, что-то вроде этого должно работать:

ls | head -20000 | xargs -I {} mv {} subdir

(где subdir - это subdir, в который вы хотите переместить файлы).

Сначала запустите это (с командой echo), чтобы убедиться, что оно будет работать, прежде чем выполнять фактическое перемещение:

ls | head -20000 | xargs -I {} echo mv {} subdir

Просто будьте осторожны, поскольку вы перемещаете файлы в подкаталог, потому чтокоманда "ls", вероятно, также подберет ваши подкаталоги.

Если все они являются текстовыми файлами, вы можете сделать что-то вроде этого:

ls | grep txt$ | head -20000 | xargs -I {} mv {} subdir

, чтобы получить файлы, заканчивающиеся на txt

2 голосов
/ 23 июня 2011

Или вы можете захотеть объединить head и tail для извлечения записей из середины:

Пример данных:

banana
cherry
apple
orange
plum
strawberry
redcurrant

Теперь давайте пропустим 2 записи и получимследующие 2:

cat fruit.txt | head -n 4 | tail -n 2

Это даст вам:

apple
orange

Итак, head -n 4 вернет первые 4 записи ( банан в оранжевый) и следующие tail -n 2 получат последние 2 из этого предыдущего результата ( яблоко до оранжевый ), а не из оригиналафайл.

...