Как перечислить *.tar.gz, по одному имени файла на строку?

chmod 600 ~/.ssh/id_rsa; chmod 600 ~/.ssh/id_rsa.pub (т.е. chmod u=rw,go= ~/.ssh/id_rsa ~/.ssh/id_rsa.pub) верны.

chmod 644 ~/.ssh/id_rsa.pub (т.е. chmod a=r,u+w ~/.ssh/id_rsa. pub) также будет правильным, но chmod 644 ~/.ssh/id_rsa (т.е. chmod a=r,u+w ~/.ssh/id_rsa) - нет. Ваш открытый ключ может быть открытым, главное, чтобы ваш закрытый ключ был закрытым.

Также сам каталог .ssh должен быть доступен для записи только вам: chmod 700 ~/.ssh или chmod u=rwx,go= ~/.ssh. Вам, конечно, нужно иметь возможность читать его и получать доступ к файлам в нем (разрешение execute). Непосредственно вреда от того, что другие могут его читать, нет, но и пользы тоже.

Вам не нужен sudo. Не используйте sudo для работы с собственными файлами, это может привести только к ошибкам.

Ошибка с .ICEauthority не связана с командами chmod, которые вы показываете. Либо это совпадение, либо вы выполняли какие-то другие команды, которые вы нам не показываете.

8
29.11.2018, 10:33
5 ответов

Опция -1(цифра «один», не ниже -регистр «L» )будет перечислять по одному файлу в строке без какой-либо другой информации:

ls -1 -- *.tar.gz
40
27.01.2020, 20:08

Если вам нужны только имена файлов, вы можете использоватьprintf:

printf '%s\n' *.tar.gz

... оболочка расширит подстановочный знак *.tar.gzдо имен файлов, затем printfнапечатает их, за каждым из которых следует новая строка. Этот вывод будет немного отличаться от выводаlsв случае имен файлов со встроенными в них символами новой строки :

.

настройка

$ touch file{1,2}.tar.gz
$ touch file$'\n'3.tar.gz

лс

$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz

печать

$ printf '%s\n' *.tar.gz
file1.tar.gz
file2.tar.gz
file
3.tar.gz
19
27.01.2020, 20:08

Чуть более окольный и извилистый способ:

for i in *.tar.gz; do
    echo "$i"
done

РЕДАКТИРОВАТЬ :добавлены кавычки для обработки странных имен файлов

4
27.01.2020, 20:08

Или сGNU find:

find  -name "*.tar.gz"  -printf '%P\n'

В отличие от lsс *он будет искать .tar.gzфайлы рекурсивно:

$ find  -name "*.tar.gz"  -printf '%P\n'
file1.tar.gz
dir/file3.tar.gz
file2.tar.gz
7
27.01.2020, 20:08

ls ведет себя иначе, когда его вывод передается по конвейеру. Например:

ls          # outputs filenames in columns
ls | cat    # passes one filename per line to the cat command

Итак, если вы хотите просмотреть все свои *.tar.gzфайлы, по одному в строке, вы можете сделать это:

ls *.tar.gz | cat

Но что, если вы не хотите передавать свой вывод по конвейеру? То есть есть ли способ заставить lsвыводить имена файлов по одному в строку без конвейерной обработки вывода?

Да, с помощью переключателя -1. (Это тире с цифрой 1. )Таким образом, вы можете использовать эти команды:

ls -1             # shows all (non-hidden) files, one per line
ls -1 *.tar.gz    # shows only *.tar.gz files, one per line
9
27.01.2020, 20:08

Теги

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