якщо знайти ext то cp батьківський реж інший echo не знайдено


1

До цих пір я придумав це.

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

Але те, що я хотів би зробити, це скопіювати батьківську директорію знайденого файлу в інше місце.

У мене є відчуття, що я повинен просто використовувати команду find.


Чи можете ви описати, що вам дійсно потрібно виконати? Якщо папка містить a .mkv ви хочете скопіювати папку в інше місце?
slhck

@slhck Так, це те, що я хотів би зробити.
David Custer

Відповіді:


1

Відповідь fede.evol не виконується, якщо шляхи містять пробіли. Вихід find або ls не слід використовувати в підстановці команди .

Правильний спосіб мати справу з усіма іменами файлів (за винятком шляхів з новими рядками) буде:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

Таким чином, кожна папка з /somewhere копіюється /other/. Зауважте, що кінцева риса є обов'язковою, оскільки в іншому випадку ціль завжди буде перезаписана.


1

Використовуйте dirname FILE щоб отримати ім'я каталогу даного файлу. Так, наприклад:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

Дасть вам всі каталоги з MKV під DIRECTORY. Тоді ви можете пройти їх uniq не отримувати подвійні і потім у випадку копіювання.

Наприклад

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

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