Вопрос: find: 'ls' завершен сигналом 13 error [duplicate]


На этот вопрос уже есть ответ:

Мой скрипт

log=$HOME/Deleted/$(date)
find $HOME/OldLogFiles/ -type f -mtime -7 -exec ls -latr {} \; -exec echo was deleted on `date` \; -exec rm -f "{}" \;|paste - - >> $log

Моя цель для скрипта - удалить файлы старше х дней, а затем записать их в файл и отобразить имя файла, дату удаления и сколько ей было лет. Я продолжаю получать эти ошибки, однако ...

./test.sh: line 3: $log: ambiguous redirect
find: ‘ls’ terminated by signal 13
find: ‘ls’ terminated by signal 13

У кого-нибудь есть предложения?


2
2018-06-28 14:46


Источник


Можете ли вы точно определить, чего вы пытаетесь достичь здесь? Это поможет любому, кто пытается ответить на ваш вопрос, а также любому, кто ищет похожие вопросы. - Andrew Lott
Конечно, я обновил его для вас. - mkrouse
Downvote, потому что это продолжение superuser.com/q/612930/195224 - mpy
Пожалуйста. Просто, чтобы вы знали, @mpy только пытается быть хорошим пользователем SU, я уверен, что он ничего не имеет против вас лично, и у меня нет ничего, кроме уважения к качеству его ответы, Мы просто не согласны с этим конкретным моментом. - terdon
-a вариант ls не имеет смысла при применении к аргументу (файлам) файла. (ls –l .bashrc работает отлично; вам не нужно говорить ls –la.) И -t а также -r параметры имеют смысл только тогда, когда у вас есть несколько аргументов или один (или более) аргумент каталога. Итак, поскольку вы говорите -type f, вы можете также сказать просто -exec ls -l {}, - Scott


Ответы:


Прежде всего, исходя из вашего предыдущего вопроса, вы хотите -mtime +7 в течение 7 дней или старше. -mtime -7 означает 7 дней или новее.

ambiguous redirect ошибка, вероятно, означает, что $log не определен. Я не могу воспроизвести ваши find: ‘ls’ terminated by signal 13 это, вероятно, зависит от конкретных файлов, которые у вас есть в соответствующей папке. Не могли бы вы разместить список файлов где-нибудь?

Так или иначе, signal 13  означает сломанную трубу так что что-то идет не так. Проводите ли вы эту команду через head или tail или похожие? Попробуйте это и посмотрите, есть ли у вас одинаковые ошибки:

find $HOME/OldLogFiles/  -type f -mtime +7 -exec stat -c "%n %y"  "{}" \; -exec echo was deleted on `date` \; |paste - - >>$log

1
2018-06-28 17:50



ambiguous redirection также могут быть вызваны пробелами в $log; попробуйте это в bash: log=$(date); echo foo > $log, это не удается, log=$(date); echo foo > "$log" работает нормально. - mpy
Ну, соединяя здесь штуки: если есть что-то о $log (например, неэкранированные, некотируемые вложенные пространства), что делает >> $log fail, то это означает, что paste процесс никогда не запускается, и поэтому find ничего не говорит. Но find не записывает на свой стандартный вывод; это только порождение дочерних процессов (ls а также echo), которые делают. (rm также разделяет тот же самый stdout; т. е. сломанной трубой, но она ничего не пишет к ней.) Таким образом, каждый раз find вилка / Execs ls а также ls пишет, он получает сигнал разбитого канала. - Scott
Вопрос только в том, почему echo проявляют такое же поведение? Вероятно, это связано с тем, что echo это встроенная команда shell. - Scott