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

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

Мне нужно переместить файлы из папки в подпапку, и этот процесс может быть выполнен более одного раза, поэтому подпапка не может быть пустой.

Предположим, что структура выглядит следующим образом:

renatospaka@dell-w10home:~/devlpm$ ls -la
total 24
drwxr-xr-x  4 renatospaka renatospaka 4096 Sep  8 12:36 .
drwxr-xr-x 10 renatospaka renatospaka 4096 Sep  8 12:34 ..
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:36 api
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file1.txt
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file2.txt
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:34 new

Есть это превосходноевопросиз которого я извлек следующую команду: ls | grep -v new | xargs mv -t new. Она действительно работает и перемещает содержимое вновыйпапка. Однако, начиная со второго выполнения, появляется ошибка, так как папка назначения не пуста, и процесс завершается аварийно.

Как исправить эту проблему? Я пробовал несколько комбинаций флагов, xargsно все они не увенчались успехом...

решение1

mvжалуется, потому что не получает никаких аргументов от xargs. Добавьте -r, чтобы предотвратить xargsвыполнение, если входные данные пусты:

   -r, --no-run-if-empty
          If the standard input does not contain any nonblanks, do not run the command.  Normally, the command is run once even if there is  no  in‐
          put.  This option is a GNU extension.

Кроме того, вы можете контролировать mvповедение при наличии пункта назначения:

Видеть man mv:

   -f, --force
          do not prompt before overwriting

   -i, --interactive
          prompt before overwrite

   -n, --no-clobber
          do not overwrite an existing file

Так:

... |  xargs -r mv -f -t new

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

Связанный контент