Как я могу переместить все файлы в подкаталоги рекурсивно в один каталог?

Самым простым решением является открытие PhpStorm, где он будет отображаться в панели запуска. Затем щелкните правой кнопкой мыши по нему в панели запуска и выберите «Заблокировать в Launcher» и все сделанное.

10
задан 7 May 2011 в 17:38

24 ответа

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 25 May 2018 в 21:20
  • 1
    ох, что не произошло со мной. благодаря :) – Bunny Rabbit 7 May 2011 в 15:56
  • 2
    Как я уже сказал в своем ответе на вопрос, это потенциально плохая идея. Возможно, использование аргумента -maxdepth 1 поможет. – loevborg 7 May 2011 в 17:24
  • 3
    Подумайте об этом, похоже, я прочитал ваш вопрос неправильно :) Извините. – loevborg 7 May 2011 в 17:25
  • 4
    @loevborg: Я добавил «рекурсивно». к названию сейчас. Если есть еще путаница, отредактируйте ее и улучшите ее :) – Lekensteyn 7 May 2011 в 17:39
  • 5
    более быстрое изменение этого ответа - find -type f -print0|xargs -0r mv -it colection/ – hildred 4 March 2014 в 23:20

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 25 July 2018 в 21:59

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 26 July 2018 в 18:15

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 31 July 2018 в 10:50

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 31 July 2018 в 10:55

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 31 July 2018 в 11:54

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 2 August 2018 в 03:33

Удалите {} из mv, mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

find -type f -exec mv {} collection/ \;
13
ответ дан 4 August 2018 в 19:31

Удалите {} из mv , mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

   find -type f -exec mv {} collection / \;   
13
ответ дан 6 August 2018 в 03:40

Удалите {} из mv , mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

   find -type f -exec mv {} collection / \;   
13
ответ дан 7 August 2018 в 21:32

Удалите {} из mv , mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

   find -type f -exec mv {} collection / \;   
13
ответ дан 10 August 2018 в 09:48

Удалите {} из mv , mv возьмет его в качестве целевого каталога, игнорируя любые родительские каталоги:

   find -type f -exec mv {} collection / \;   
13
ответ дан 13 August 2018 в 16:03
  • 1
    ох, что не произошло со мной. благодаря :) – Bunny Rabbit 7 May 2011 в 15:56
  • 2
    Как я уже сказал в своем ответе на вопрос, это потенциально плохая идея. Возможно, использование аргумента -maxdepth 1 поможет. – loevborg 7 May 2011 в 17:24
  • 3
    Подумайте об этом, похоже, я прочитал ваш вопрос неправильно :) Извините. – loevborg 7 May 2011 в 17:25
  • 4
    @loevborg: Я добавил «рекурсивно». к названию сейчас. Если есть еще путаница, отредактируйте ее и улучшите ее :) – Lekensteyn 7 May 2011 в 17:39
  • 5
    более быстрое изменение этого ответа - find -type f -print0 | xargs -0r mv -it colection / – hildred 4 March 2014 в 23:20

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 25 May 2018 в 21:20
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 25 July 2018 в 21:59
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 26 July 2018 в 18:15
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 31 July 2018 в 10:50
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 31 July 2018 в 10:55
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 31 July 2018 в 11:54
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 2 August 2018 в 03:33
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

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

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественная попытка:

mv $PWD/* $DEST

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последним аргументом mv является конечный каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

shopt -s dotglob

при использовании bash (и вы, вероятно, используете bash, если вы не изменили значение по умолчанию). В этой оболочке вышеприведенная команда будет работать и для точечных файлов.

В стороне, в zsh, вы можете выбрать это в каждом конкретном случае. Для этого поставьте

setopt extendedglob

в свой .zshrc. Затем вы можете использовать

mv $PWD/*(D) $DEST

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это может быть достигнуто с помощью zsh:

mv $PWD/**/*(D.)

Здесь выражение **/* заставляет globber рекурсивно опускаться в подкаталоги. [F14] означает «также выбрать dotfiles», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 4 August 2018 в 19:31
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection/ {} +. Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

Вместо использования find (который хорошо выполняет задание) вы также можете использовать оболочку для этой цели.

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественной попыткой было бы:

  mv $ PWD / * $ DEST  

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последний аргумент mv - это целевой каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

  shopt -s dotglob  

при использовании bash (и вы, вероятно, используете bash [ ! d5], если вы не изменили значение по умолчанию). В этой оболочке указанная выше команда будет работать и для точечных файлов.

В стороне, в zsh , вы можете выбрать это в каждом конкретном случае , Для этого поместите

  setopt extendedglob  

в ваш .zshrc . Затем вы можете использовать

  mv $ PWD / * (D) $ DEST  

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это можно сделать с помощью zsh :

  mv $ PWD / ** / * (D.)  

Здесь выражение ** / * заставляет globber рекурсивно опускаться в подкаталоги. [D13] D означает «также выбрать точечные файлы», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 6 August 2018 в 03:40

Вместо использования find (который хорошо выполняет задание) вы также можете использовать оболочку для этой цели.

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественной попыткой было бы:

  mv $ PWD / * $ DEST  

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последний аргумент mv - это целевой каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

  shopt -s dotglob  

при использовании bash (и вы, вероятно, используете bash [ ! d5], если вы не изменили значение по умолчанию). В этой оболочке указанная выше команда будет работать и для точечных файлов.

В стороне, в zsh , вы можете выбрать это в каждом конкретном случае , Для этого поместите

  setopt extendedglob  

в ваш .zshrc . Затем вы можете использовать

  mv $ PWD / * (D) $ DEST  

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это можно сделать с помощью zsh :

  mv $ PWD / ** / * (D.)  

Здесь выражение ** / * заставляет globber рекурсивно опускаться в подкаталоги. [D13] D означает «также выбрать точечные файлы», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 7 August 2018 в 21:32

Вместо использования find (который хорошо выполняет задание) вы также можете использовать оболочку для этой цели.

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественной попыткой было бы:

  mv $ PWD / * $ DEST  

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последний аргумент mv - это целевой каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

  shopt -s dotglob  

при использовании bash (и вы, вероятно, используете bash [ ! d5], если вы не изменили значение по умолчанию). В этой оболочке указанная выше команда будет работать и для точечных файлов.

В стороне, в zsh , вы можете выбрать это в каждом конкретном случае , Для этого поместите

  setopt extendedglob  

в ваш .zshrc . Затем вы можете использовать

  mv $ PWD / * (D) $ DEST  

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это можно сделать с помощью zsh :

  mv $ PWD / ** / * (D.)  

Здесь выражение ** / * заставляет globber рекурсивно опускаться в подкаталоги. [D13] D означает «также выбрать точечные файлы», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 10 August 2018 в 09:48

Вместо использования find (который хорошо выполняет задание) вы также можете использовать оболочку для этой цели.

Предположим, что вы хотите, чтобы все файлы с $ PWD до $ DEST. Естественной попыткой было бы:

  mv $ PWD / * $ DEST  

Как это работает? Выражение «$ PWD / *» расширяется до имен всех файлов в этом каталоге. Эта функция оболочки называется «globbing». Последний аргумент mv - это целевой каталог. Если у вас очень много файлов, это не сработает, потому что длина командной строки ограничена.

Но у решения есть проблема, что он пропускает файлы точек - или «скрытые» файлы, файлы и каталоги чье имя начинается с «.». Чтобы решить эту проблему, вы должны сообщить своей оболочке о включении dotfiles при globbing. Для этого используйте

  shopt -s dotglob  

при использовании bash (и вы, вероятно, используете bash [ ! d5], если вы не изменили значение по умолчанию). В этой оболочке указанная выше команда будет работать и для точечных файлов.

В стороне, в zsh , вы можете выбрать это в каждом конкретном случае , Для этого поместите

  setopt extendedglob  

в ваш .zshrc . Затем вы можете использовать

  mv $ PWD / * (D) $ DEST  

для перемещения всех файлов, включая dotfiles. («D» имеет эффект временного включения опции «GLOB_DOTS»).

Теперь исходный вопрос состоял в том, чтобы переместить все обычные файлы (не каталоги) из всех подкаталогов и их подкаталогов в один каталог. Это можно сделать с помощью zsh :

  mv $ PWD / ** / * (D.)  

Здесь выражение ** / * заставляет globber рекурсивно опускаться в подкаталоги. [D13] D означает «также выбрать точечные файлы», . означает «выбирать только обычные файлы, а не каталоги».

5
ответ дан 13 August 2018 в 16:03
  • 1
    ну, я тоже хотел бы перечислить все подкаталоги, но, спасибо какой-нибудь информации полезной, слишком часто сталкиваешься с этой ситуацией :) – Bunny Rabbit 7 May 2011 в 18:10
  • 2
    На самом деле найти не слишком много для этого, globbing выберет все совпадения, а не только файлы, но и каталоги. Если вы беспокоитесь о производительности, вы также можете использовать что-то вроде: find -type f -exec mv -t collection / {} + . Обратитесь к странице руководства о том, как это работает. – Lekensteyn 7 May 2011 в 18:18
  • 3
    Лекенстейн, ты прав. Теперь я уточнил ответ, что понял вопрос. – loevborg 7 May 2011 в 18:45
  • 4
    Замечательный ответ, слишком плохо, что это не особенно актуально для вопроса :). – crazy2be 7 May 2011 в 23:21

Другие вопросы по тегам:

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