Скопируйте два последних файла и добавьте дату - PullRequest
1 голос
/ 10 марта 2020

Я ищу способ скопировать новейшие .gz файлы, которые у меня есть в Dir A в Dir B, и добавить дату к этим файлам.

Пример:

Dir A

  • cinema.gz
  • radio.gz
  • cars.txt
  • camera.gz

Dir B

  • cinema.gz.20200310
  • radio.gz.20200310

Использование с помощью следующей команды я могу скопировать новейшие .gz файлы в dirb

cp $(ls -1t /dira *gz | head -2) "dirb"

Однако я не могу найти способ изменить добавление даты к имени файла.

Я пытался что-то вроде этого:

cp $(ls -1t /dira *gz | head -2) "dirb/*.$(date +%F_%R)"

Но не работает вообще.

Ваша помощь, пожалуйста:)

Ответы [ 3 ]

0 голосов
/ 10 марта 2020

Попробуйте приведенный ниже код из родительского каталога dira и dirb;

ls -1t dira/*.gz | head -2 | while read -r line; do cp $line dirb/${line#*/}.$(date +%F_%R); done

Я использую while для l oop над файлами и ${line#*/} обрезает имя каталога. Дайте мне знать, если у вас есть запрос.

0 голосов
/ 11 марта 2020
for TO_MOVE in `ls -t *.gz | head -n2`; do 
    cp $TO_MOVE dirb/;
    mv dirb/$TO_MOVE dirb/$TO_MOVE.`date +%Y%m%d`;
done
0 голосов
/ 10 марта 2020

К сожалению, вы не можете сжать это в одну команду cp. Однако вы можете сделать это.

for f in $(ls -1t/dira gz | head -2); do
    cp "$f" "dirb/$f.$(date +%F_%R | sed 's;/;\\/;g')"
done

Редактировать: я передаю дату через sed, чтобы экранировать символы '/' в строке даты (в противном случае cp будет интерпретировать их как имена каталогов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...