[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Câu đố nè: tách ra hai thành phần đầu của chuỗi



On Jan 6, 3:59 pm, Xuân Tính <[email protected]> wrote:
> Em còn noob lắm nên nghỉ ra cái này:
>
> for i in *; do

Với vòng lặp này thì sẽ xảy ra chuyện file cũ đè file mới

> j=${#i}; l=`echo $((j-19))`;

Ah!! Đếm số ký tự rồi trừ đi 19 ký tự cuối cùng (giống pattern nhau!)

> k=`echo ${i:0:l}tar.gz`; mv $i $k;

Lấy đi phần đầu tiên (bỏ đi các ký tự cuối)

> done
> Dùng sed với awk thi có vẻ gọn hơn nhưng cú pháp f*ck tạp quá nên làm biếng

Cách ở trên gọn. Chỉ vướng mắc ở chỗ chuyện các tập tin đè nhau. Cách
của mình đã làm đây

<pre>
level=0; ls -tr *.tar.gz | grep "\.$level\.2012" | while read _file;
do mv -iv $_file "${_file%%.*}".$level.tar.gz; done
</pre>

Cách này không giải quyết đồng loạt cho các tập tin level > 0 (Ví dụ
*etc.1.201201051026.tar.gz*), nhưng có thể dùng vòng for khác để xử
lý.

Giải thưởng sẽ được trao cho bác Tính ^^

> Vào 14:37 Ngày 06 tháng 1 năm 2012, Anh K. Huynh <[email protected]> đã
> viết:
>
>
>
>
>
>
>
> > On Fri, 6 Jan 2012 14:29:10 +0700
> > Linux <[email protected]> wrote:
>
> > > =,=
> > > em đang nghi ngờ có tính đố vui có thưởng trong này
>
> > Sao lại nghi ngờ nhỉ ^^
>
> > Ghi chú thêm là trong bài toán sau khi đổi tên sẽ có những tập tin
> > trùng nhau: những tập tin cũ hơn sẽ bị xóa nhé :)
>
> > --
> > Anh K. Huynh
> > System administrator
>
> > --
> > Group Email: [email protected]
> > Unsubscribe: [email protected]
> > Options:http://groups.google.com/group/archlinuxvn