2011-06-23 2 views
4

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

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

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

ответ

7

Если вы используете Cygwin, вы должны быть в состоянии использовать команду головы, как это:

ls | head -20000 

перечислить первые 20 тысяч.

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

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

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

Выполнить это первое (с эхо-команды), чтобы проверить это будет работать перед запуском фактического перемещения:

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

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

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

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

2

Или вы можете объединить 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 из этого предыдущий результат (apple до orange), а не из исходного файла.