Почему while не работает в том же сценарии оболочки, что и find? [закрыто]

Проблема в том, что ваши имена файлов содержат новую строку, например aaa \ nbbb , а ваш find | Метод чтения не может отличить это от двух файлов, aaa и bbb .

Обычный ответ на этот вопрос - заставить find разделять имена файлов символом nul \ 0 , используя find -print0 , а затем используя IFS = read -r -d '' FILENAME , чтобы прочитать этот входной поток. -d '' указывает read использовать символ нуля в качестве разделителя строк, -r останавливает обработку обратной косой черты, а IFS = сохраняет пробелы в начале и в конце.

3
21.01.2019, 06:36
1 ответ

Вам не нужен сценарий оболочки. Одна команда findбудет искать файлы и перемещать их :

.
read -r mam
find "$mam" -type f -size +10k -exec mv {} /home/patakinorbert/Desktop/prk1 \;

Слова между -execи \;— это команда, которая выполняется для каждого найденного файла, где {}заменено именем найденного файла.

В системе Linux, такой как Ubuntu, или любой другой системе, использующей инструменты GNU, более эффективной версией этой команды является:

read -r mam
find "$mam" -type f -size +10k -exec mv -t /home/patakinorbert/Desktop/prk1 +

Это более эффективно, поскольку перемещает несколько файлов, используя один вызов mv.

2
27.01.2020, 21:24

Теги

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