mv файли з | xargs


18

Я просто намагаюся перемістити купу файлів (не символьних посилань) з папки / etc / apache / сайтів, що підтримуються, у папку / etc / apache / sites - з наступним:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

але я ubuntu n00b і отримую цю помилку:

mv: target `./real-file' is not a directory

де 'real-file' - тестовий файл, який я створив у своєму середовищі розробників. Я намагаюся налагодити чужий безлад на виробничому сервері ;-)

Відповіді:


27

Ви можете спробувати -execваріант з findкомандою,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Для переміщення файлів, що належать root, потрібні sudoдозволи.

Якщо ви хочете використовувати xargsкоманду, тоді додайте -Iдо неї опцію.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/

7

В ідеалі слід використовувати -print0 з find, тому назви файлів з пробілами не скачують речі.

Наприклад, це має працювати:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory

0

Ви можете також скористатися іншим способом виконання того ж, але з додатковою продуктивністю :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Зауважте, що це закінчується тим, \+що для команди find отримує результат і розширюється на {}виконання того, що ви хочете, таким чином ви уникаєте двох варіантів ( \;= для кожного запису ТА перенесення в нову команду xargs)

Ось пояснення (ви також можете перевірити керівництво man find)

Команда -exec {} + Цей варіант дії -exec виконує вказану команду для вибраних файлів, але командний рядок будується додаванням кожного вибраного імені файлу в кінці; загальна кількість викликів команди буде значно меншою, ніж кількість відповідних файлів. Командний рядок побудований приблизно так само, як xargs будує свої командні рядки. У команді допускається лише один екземпляр "{}". Команда виконується в початковому каталозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.