Как переместить первые x файлы

В Солярисе (> = 10) команда ls имеет-E опцию. Таким образом, Ваша команда могла быть столь же простой как ls -E /etc/hosts или ls -E /etc/hosts | awk '{print $6}'| sed 's#-##g'

получить желаемый результат.

22
14.12.2013, 10:49
7 ответов
mv `ls | head -500` ./subfolder1/
26
27.01.2020, 19:42
  • 1
    (предполагающий, что ни одни из имен файлов не содержат пространство, вкладку, новую строку, звезду, открытую квадратную скобку, символы вопросительного знака или запускаются с - или . и принятие subfolder1 самостоятельно не обнаруживается в том списке.) –  Stéphane Chazelas 13.12.2013, 19:05
  • 2
    @StéphaneChazelas, если файл содержит их, как мы изменяем команду? –  Peiti Li 11.11.2017, 01:19

С zsh:

mv -- *(D.oN[1,5000]) ./subfolder1

Для перемещения до 5 000 регулярных файлов в порядок, они находятся в каталоге.

Для первых 5000 в лексикографически отсортированном списке:

mv -- *(D.[1,5000]) ./subfolder1

Если Вы получаете ошибку о списке аргумента слишком долго. Можно использовать zshbuitin mv команда путем издания:

zmodload zsh/files

сначала.

POSIXly:

set --
for f in .* *; do
  [ "$#" -lt 5000 ] || break
  [ -f "$f" ] || continue
  [ -L "$f" ] && continue
  set -- "$@" "$f"
done
mv -- "$@" subfolder1/
15
27.01.2020, 19:42
  • 1
    отрывок POSIX, является драгоценным камнем –  iruvar 13.12.2013, 20:55

Вы, возможно, должны были бы сделать что-то вроде этого:

x=1
for file in *
do
    if [ "X$x" = "X#####" ]; then
        break
    fi
    mv $file <destination>
    x=`expr $x + 1`
done

Этот сценарий работает в ударе, ksh, sh и нескольких вариантах UNIX.

3
27.01.2020, 19:42
  • 1
    (если ни одни из имен файлов не содержат пространство, вкладку, новую строку, звезду, открытую квадратную скобку, символы вопросительного знака или запускаются с - или. и обеспеченный destination самостоятельно не обнаруживается в том списке.) Верный –  Stéphane Chazelas 13.12.2013, 19:25
  • 2
    @StephaneChazelas. Это не полное решение просто метод контакта с проблемой. –  Karlson 13.12.2013, 19:39

Una versión que es simple y admite caracteres especiales, espacios, etc.

ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/

Para que esto funcione como -es dir2debe existir y debe ejecutarlo desde el directorio principal de dir1y dir2.

Esto moverá 1000 archivos de dir1 a dir2.

9
27.01.2020, 19:42
  1. Перейдите в каталог, из которого вы хотите переместить файлы
  2. запуск ниже команды

    find. -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/ 
    

В команде find.(точка )обозначает текущий каталог

находит файлы, которые начинаются с Hello и заканчиваются на gz, первые 5000 файлов будут перемещены по пути/data01/path/

5
27.01.2020, 19:42

Мне удалось успешно выполнить перемещение на 50 000 без такой ошибки mv bash

 ls | head -50000 | xargs -I{} sudo mv {} 01/

Забавно, это было на общем ресурсе samba, поэтому ограничение в 50 КБ связано с тем, что графический интерфейс Windows Explorer не любит более 60 КБ файлов в каталоге.

2
27.01.2020, 19:42

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

ls -U. | head -1000 | xargs mv -t 01/

(Обратите внимание, что синтаксис с {} создает новый mv для каждого файла, а этот — нет)

2
04.02.2020, 19:28

Теги

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