неизвестное пространство между цифрами после команды echo

Это происходит потому, что, вероятно, у вас нет прав на чтение в чужой директории. Если у вас нет прав на чтение, вы не можете просматривать / искать / находить какой-либо контент. Вы можете проверить это с помощью следующей команды:

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 - вы выполняете поиск только для обычных файлов.

1
задан 21 October 2015 в 17:14

2 ответа

Если вы получаете этот вывод, у вас есть конечное пространство в вашем 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
1
ответ дан 23 May 2018 в 16:30

Удалите все после года / месяца / дня непосредственно в команде sed;

В функции pl() замените

sed -n "$1p" $2

на

[ f2]
0
ответ дан 23 May 2018 в 16:30
  • 1
    он дает - строки, я имею в виду, что не работает должным образом – deepblue_86 21 October 2015 в 16:20
  • 2
    на этот раз дает; 2014-- – deepblue_86 21 October 2015 в 16:21
  • 3
    @ deepblue_86 Плохо, моя первая команда (-а) была фактически неправильной. Это должно сработать. – kos 21 October 2015 в 20:02

Другие вопросы по тегам:

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