У меня есть файл журнал, который выглядит следующим образом:Баша список файлов обновления имен файлов с полным путем
Jan 1 06:09:23 somefile.txt
Jan 2 12:18:27 somefile1.txt
Jan 3 04:16:00 somefile2.txt
Я хотел бы найти каждый файл и вставить полный путь к каждому файлу в этот файл. Я бы подумал, что есть некоторая комбинация find, awk и sed, которая выполнит это, но до сих пор я не нашел жизнеспособного решения для обновления файла, как показано ниже.
Jan 1 06:09:23 /path/to/file/somefile.txt
Jan 2 12:18:27 /path/to/file1/somefile1.txt
Jan 3 04:16:00 /path/to/file2/somefile2.txt
Я был в состоянии вырезать имя файла и найти файлы без проблем, но что я пришел с до сих пор выписывает новый файл и теряет оригинальное содержимое файла. Я надеялся сохранить исходный файл в такт.
#!/bin/bash
#functions
getup(){
for i in `cat /home/work/uploadtmp`
do
find /home/uploads/*$i 2> /dev/null >> /home/work/upfile
done
}
listfile(){
while read line; do ls -lt $line; done < /home/work/upfile
}
#run functions
getup
listfile | awk '{print $1 " " $2 " " $3 " " $4}' | sort -k1M -k2 -k3 > /home/log/newfile
[DontReadLinesWithFor] (HTTP : //mywiki.wooledge.org/DontReadLinesWithFor) –
... и не пытайтесь использовать 'ls' программно: http://mywiki.wooledge.org/ParsingLs –
И не используйте' >> 'внутри цикл - это * много * более эффективно размещать '> outfile' на * вне * цикла, поэтому вы открываете файл только один раз, а также повторно открываете его каждый раз, когда хотите добавить строку. –