Как отобразить только последнюю строку списка?

Я скопирую Вас сценарий, чтобы сделать это, но в следующий раз проводят некоторое исследование сначала и пытаются записать это собой. Это - единственный способ учиться. И, не используйте его, не понимая его.

#!/bin/bash
tosend=""
for i in *.log; do
    dir=$(echo $i | awk '{split($1,a,"_"); print a[1]}');
    if [ ! -d $dir ]; then
        mkdir $dir;
    fi;
    cp $i $dir;
    tosend="$tosend\n$dir"
done
for i in $(echo -e $tosend | uniq);do
    echo Compressing $i
    tar -zcvf $i.tar.gz $i
    scp $i.tar.gz user@server
done

Ключевая роль использует awk для разделения имени файла и затем сохраняет список папок, которые Вы изменили. Это не является самым изящным, но это работает.

Обратите внимание при копировании файлов, в следующий раз, выполнение его, они будут скопированы снова. Лучшая вещь состояла бы в том, чтобы переместить их.

Btw, я добавил uniq часть вместо того, чтобы добавить имя к "массиву" в, если, потому что возможно, что папки уже существуют, когда Вы запускаете скрипт.

Однако, если Вы только хотите отправить новые файлы, и Вы выполняете его в полночь, это - вероятно, лучший подход:

#!/bin/bash
tosend=""
for i in *.log; do
    dir=$(echo $i | awk '{split($1,a,"_"); print a[1]}');
    if [ ! -d $dir ]; then
        mkdir $dir;
        tosend="$tosend\n$dir"
    fi;
    mv $i $dir;
done
for i in $tosend;do
    echo Compressing $i
    tar -zcvf $i.tar.gz $i
    scp $i.tar.gz user@server
done

Это только отправило бы новые папки (даже при том, что некоторые старые могут иметь новые файлы). И с mv основная папка будет содержаться в чистоте.

Для более сложных/пуленепробиваемых подходов я думаю, что rsync является лучшим выстрелом.

11
27.03.2015, 00:16
3 ответа

Вы ищете хвоста :

ls -ltr | tail -n 1

Это отобразится только последняя строка выхода LS -LTR . Вы можете управлять количеством линий, изменив значение после -N ; Если вы опускаете -N 1 полностью вы получите десять строк.

11
27.01.2020, 19:56

Так как вы спрашивали о SED конкретно,

ls -ltr | sed '$!d'
24
27.01.2020, 19:56

с awk:

ls -ltr | awk 'END { print }'
5
27.01.2020, 19:56

Теги

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