Это происходит потому, что, вероятно, у вас нет прав на чтение в чужой директории. Если у вас нет прав на чтение, вы не можете просматривать / искать / находить какой-либо контент. Вы можете проверить это с помощью следующей команды:
ls -l /home/username/directory
Также убедитесь, что те файлы или каталоги, для которых вы выполняете поиск, являются действительно файлами или каталогами (первый символ из 10 символов с строкой символов - - или [ f5], а не что-то еще - l в вашем случае, что означает символические ссылки).
ls показывает разрешения в виде 10-символьной строки, например -rw-r--r--. Символы могут быть интерпретированы как TUUUGGGOOO, где:T Type
UUU Rights for the owner of the file
GGG Rights for users in the group
OOO Rights for others, not listed above
T является одним из: - file
d directory
c character device
b block device
l symbolic link
Источник: введение в права доступа к файлам Unix
Кроме того, когда вы используете: [ ! d9] find -type d - вы ищете только для каталогов. find -type f - вы выполняете поиск только для обычных файлов.
Если вы получаете этот вывод, у вас есть конечное пространство в вашем year файле. Это работает точно так, как ожидалось, если вы этого не сделаете:
$ printf "2013\n2013\n2013\n" > year; printf "03\n03\n03\n" "03" > month; printf "08\n09\n10\n" > day
$ for (( j=1; j <= 3; j++ )); do
yr=$(pl $j year)
mnth=$(pl $j month)
dy=$(pl $j day)
date_format=$yr-$mnth-$dy
echo $date_format
done
2013-03-08
2013-03-09
2013-03-10
И если вы добавите конечное пространство:
$ printf "%s2013 \n2013 \n2013 \n" > year
$ for (( j=1; j <= 3; j++ )); do
> yr=$(pl $j year)
> mnth=$(pl $j month)
> dy=$(pl $j day)
> date_format=$yr-$mnth-$dy
> echo $date_format
> done
2013 -03-08
2013 -03-09
2013 -03-10
Итак, самым простым решением является удаление пространства из вашего входного файла:
sed -i 's/ *$//' year
Обратите внимание, однако, что вы используете очень сложное решение для очень простой задачи:
$ paste -d"-" year month day | tr -d ' '
2013-03-08
2013-03-09
2013-03-10
Удалите все после года / месяца / дня непосредственно в команде sed;
В функции pl() замените
sed -n "$1p" $2
на
[ f2]