Mar 28

就介绍了三个程序  

  1. Ext2Fsd

  2. DiskInternals Linux Reader

  3. Ext2explore

 

原文地址: http://www.howtogeek.com/112888/3-ways-to-access-your-linux-partitions-from-windows/

 

如果你是Windows和Linux的双引导, 有时你很可能需要从Windows访问Linux上的文件. Linux内建支持NTFS分区, 但Windows却不支持Linux分区, 如果不使用第三方软件.

以下列表专注于支持Ext4文件系统(多数新Linux发行版默认使用的文件系统)的应用程序. 这些程序同时也支持Ext2和Ext3, 并且 其中之一还支持ReiserFS.


Ext2Fsd

Ext2Fsd是一个支持Ext2, Ext3和Ext4文件系统的文件系统驱动. 它能让Windows原生地读取Linux文件系统, 通过提供盘符来访问Linux文件系统, 任何程序都可以访问Linux文件系统.

你可以在每回电脑启动时运行或者当你需要时才运行Ext2Fsd. 理论上, 你可以启用Linux分区的写支持, 不过我还没测试过它. 我很担心(写支持)这个选项, 很可能会出错. 只读支持是没有问题的, 但不要冒险把硬盘分区搞砸了.

The Ext2 Volume Manager application allows you to define mount points for your Linux partitions and change Ext2Fsd’s settings.

....未完

Jun 5

在列表中,搜索元素比较头痛,一般只会得到第一个元素的索引,这里,我改变了搜索过的元素。当然,实际操作中,是需要把列表复制的 如 d=c[:] 再对d进行处理。

此代码来自一个问题:

yjcong

这个, 我不晓得是哪个术语对应, 所以加了个引号.

问题有2个,

1) 在一个文件中, 如何在定位的"abcxyz"后, 如何显示其下一行的内容. 若是有很多个, 如何?

2) 假设搜索的关键字在第n行, 如何同时显示第n-1, n, n+1行的内容

thx

问题二在帖子中已经解决,不再处理。http://forum.ubuntu.com.cn/viewtopic.php?f=21&t=443359&p=3007102#p3007102

关键词改为熟悉的foo

 

 

测试用例

foo
akjkdjkejwl
rkewjlkrjwelk
foo
fewkjk1kl1l2l1212l1
fewkjrkewjn mnfmenw
ewkjrkjwl
barfoofwerjwekjr
barofwerjwekjr
 

输出结果

 

akjkdjkejwl

fewkjk1kl1l2l1212l1

barofwerjwekjr

 





#!/usr/bin/env python3
import re

def fun(c):
     for i in c:
         if re.findall('foo',i):
                 try:
                         print(c[c.index(i)+1])
                         c[c.index(i)] += 'someword' 
                 except:
                         print("keyword is in the last line")

 #f=open('d:/1')
 #c=[]
#[c.append(i) for i in f.readlines()]
 #fun(c)
fun(open('d:/1').readlines())

 

 

Aug 18

虽然安装了acpi-support,但我的笔记本依然不能启用静音切换的快捷键,很不方便,于是自己写了个切换静音小脚本。至于调节音量,类推就行了。

 

# /etc/acpi/events/mutebtn
# Called when the user presses the mute button

event=button[ /]mute
action=/etc/acpi/mute.sh

 

#!/bin/sh
# /etc/acpi/mute.sh
vol=`amixer | sed -r "s/(\[|\])//g"  | sed -rn "/'Master'/,+6{h;/Playback.*%/{p;q}}" | awk '{print $5}'`
if test $vol != 0%; then
    echo $vol > /etc/acpi/volstore.dat
    amixer set Master front 0
else
    vol=`cat /etc/acpi/volstore.dat`
    amixer set Master front $vol
fi
exit 0

Jun 3

在工作中,遇到一些大图,甚至是超大图,对于大于6M的jpg图片,不得不优化一下,大图片的数量非常多,存在于不同数字编号目录里。

这里,要解决几个问题,

一、查找大于6M的jpg图片 我想到了find命令

二、分批处理与终止条件 要处理的图片实在是太多了,命令一运行,不知道连续多少天才能完成

三、备份源图片 复制就行了

四、图片优化程序的选择 必须是命令行的。我找到了jpegoptim,非常不错

五、经过优化的图片还是大于6M怎么办?不再优化!因为再处理的话,图片会严重失真,不符合要求。

六、多台机器同时处理 (未解决,文件锁问题)

 

问题二和三是紧密相连的

先说终止条件,有两种方法去终止这个脚本

1、用户输入要处理的大图数量,如100个,当处理完100个时,自然终止

2、当前处理数量小于用户输入数时,按^+C来终止,并手动把最后处理的一个文件从备份目录剪切到源目录

分批处理问题:以用户输入数为上限( 为何是上限?待处理大图未必有用户输入的那么多)

下次运行脚本时,如果有备份,就不处理已经备份的图片。

至此,全部问题得到解决。

以下附上脚本

#!/bin/bash
# by Daniel Chow @speedup2010
# v2 2012年06月 2日 星期六  2:44:05
# v3 2012年06月 2日 21:41:57
# v4 不知道跑哪去了。
# v5 2012年06月 3日 星期日 14:08:05
# 一次处理 n个大图

#bak_path=/cygdrive/b
#disk_x=/cygdrive/a
bak_path=/cygdrive/d/kingston/disk_b
disk_x=/cygdrive/d/kingston/disk_a
help(){
        echo -e "\033[31m\n\t大哥/大姐,不带这样玩的!!!\033[0m\n\t随便输入个正数吧"
        exit 0
}
if [ $# -eq 1 -a $1 -gt 0 ];then {
        echo -e "\n\t本次最多处理$1个文件"
        echo -ne "\033[31m
  \t欲终止,在显示\033[34mExif\033[31m时,按CTRL+C,\n
  \t并把最后处理的一个文件从备份目录剪切到源目录\n\n"
        echo -ne "\033[32m\t源目录:$disk_x\n
  \t备份目录:$bak_path\n
  \t源目录文件\t->\t备份文件\n"
        echo -ne "\033[0m"
        [ $PWD == $disk_x ] || cd $disk_x
        count=1
        for large_img in `find ????????? -iname "*.jpg" -size +6M -type f`;do {
                while [ ! -f $bak_path/$large_img ];do {
                        chah=${large_img%%/*}
                        [ ! -d $bak_path/$chah ] && mkdir -v $bak_path/$chah
                        cp $large_img $bak_path/$chah -v && jpegoptim --max=60 $large_img && count=`expr $count + 1 `
                        [ $count -gt $1 ]  && break 2
                        }
                done
        }
                        done;
        total_m=`expr $count - 1` && echo -e "\n\t处理了$total_m个文件\n"
        }
else
        help
fi
May 22

不断地思考,不断地想偷懒。

运行环境: cygwin

从目录4.25复制到目录e,如果文件存在/目录不存在,则不复制,并记录

 

.
|-- 4.25
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| `-- 3
| |-- 1.jpg
| |-- 2.jpg
| |-- 3.jpg
| |-- 4.jpg
| `-- 5.jpg
`-- e
|-- 1
| |-- 1.jpg
| `-- 2.jpg
|-- 2
`-- 4

脚本运行结果(运行环境是cygwin)

  • 脚本输出方面
  • 文件、目录变化

=========脚本输出=========  

$ ./calc.sh 4.25;tree
当前目录 /home/pocoyo/4.25 正在处理

"/home/pocoyo/4.25/1/3.jpg" -> "/home/pocoyo/e/1/3.jpg"
"/home/pocoyo/4.25/1/4.jpg" -> "/home/pocoyo/e/1/4.jpg"
"/home/pocoyo/4.25/1/5.jpg" -> "/home/pocoyo/e/1/5.jpg"
"/home/pocoyo/4.25/2/1.jpg" -> "/home/pocoyo/e/2/1.jpg"
"/home/pocoyo/4.25/2/2.jpg" -> "/home/pocoyo/e/2/2.jpg"
"/home/pocoyo/4.25/2/3.jpg" -> "/home/pocoyo/e/2/3.jpg"
"/home/pocoyo/4.25/2/4.jpg" -> "/home/pocoyo/e/2/4.jpg"
"/home/pocoyo/4.25/2/5.jpg" -> "/home/pocoyo/e/2/5.jpg"

文件数统计
目录 文件数
1 5
2 5
3 5
总计: 3 15

未复制文件
目录 e:\3 不存在
文件 e:\1\1.jpg 已经存在
文件 e:\1\2.jpg 已经存在

===============以下是文件、目录变化===============

.
|-- 4.25
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 3
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- conflicts.txt
| `-- total.txt
|-- calc.sh
|-- e
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| `-- 4
|-- freeime6.5.exe
|-- rename.sh
|-- rename_new.sh
`-- scan_record.txt
#!/bin/bash
# by Daniel Chow @speedup2010
# v1 2012年05月21日 星期一 22:58:31
#_source=/cygdrive/d/$1
#_des=/cygdrive/e/
_source=~/$1/
_des=~/e/
_log=$_source
if [ $# -eq 1 -a -d $_source ];then {
        cd $_source
        echo -e "当前目录 $PWD  正在处理\n"
        for files in */*;do
                _dir=${files%%/*}
                if [ -f $_des$files ];then
                        echo "文件 $_des$files 已经存在">>$_log/conflicts.txt
                elif [ ! -d $_des$_dir ];then
                        echo -e "目录 $_des$_dir 不存在" >>$_log/conflicts.txt
                elif [  -d $_des$_dir ];then
                        cp $_source$files  $_des$_dir -iv
                fi

                echo -en "\t$_dir \t`ls -l $_dir | grep "^-" | wc -l`\n" >>$_log/total.txt;
        done
        sum_dir=$(sort $_log/total.txt | uniq | wc -l)
        echo  -e "\t目录\t文件数">$_log/tmp.txt
        sort $_log/total.txt | uniq >>$_log/tmp.txt
        mv $_log/{tmp,total}.txt
        echo -e "总计:\t$sum_dir\t$(awk '{sum_files+=$2};END{print sum_files}' $_log/total.txt)">>$_log/total.txt
        echo -e "\n\t文件数统计\t\t \n`cat $_log/total.txt`\n"
        sort $_log/conflicts.txt | uniq >>$_log/tmp.txt
        mv $_log/{tmp,conflicts}.txt
        sed "s|$HOME/||g" -i conflicts.txt
        sed 's/\//:\\/;s/\//\\/' -i conflicts.txt
        echo -e "\t未复制文件\t\t \n`cat $_log/conflicts.txt`\n"

}
else
        echo -e "用法: $0 待复制目录\n"
fi

写了个新版,不过有些东西还是重复了,要重新调整一下。

 

Dec 24
#!/bin/bash
# 基本思路
# 获取主数据(data.dat)
#=>获取标题(title.dat) <title></title>
#=>制作目录(index.html),以章节标题为内容
#=>分章节{001..055} <p></p>
#=>预备内容,分离样本html为两部分a.dat:DTD..<html>..<body><div> b.dat:</div></body></html>
#合并文档
#修正标题
mkdir novel/bak -p
sed -n '1,58p' data.dat >> index.html
# vi...
sed -n '1,58p' data.dat >>title.dat
awk '{print $1}' title.dat >1.dat
awk 'NR>1&&NR!=55{print $1};NR==55{print "$"}' title.dat>2.dat
sed -n '1,/<div>/p' ex.html >a.dat
sed -n '/<div>/,$p' ex.html | sed '1d' >b.dat
cp ../philosophy/justice/htmlbook.css .
cp * backup -fv

data=`cat data.dat | tr '\n' '\034' | tr ' ' '\032'|tr '\t' '\033'`
# 变量i的作用:行数/文件名
# 对于博客的代码高亮插件,千万不要缩进,否则会非常ugly.
for i in {001..055};do
sed -n "${i}p" title.dat | sed -e "s/^/<li><a href="$i.html">/;s/$/<\/a><\/li>/">>newtitle
j=`sed -n "${i}p" 2.dat`
echo "$data" | grep -oP "$i.*$j" | tr '\034' '\n' | tr '\032' ' ' | tr '\033' '\t' | sed -n '$d' >$i
sed -e 's/^/<p>/g;s/$/<\/p>/g' -i $i
cat a.dat $i b.dat >$i.html
title=`sed -n "${i}p" title.dat`
sed -r "s/<title>.*<\/title>/<title>$title<\/title>/" -i $i.html
rm $i -f
done

==> title.dat <==
001 河州小镇
002 兰州奇遇
003 迦夏之窟
004 剑使冰璃
005 凉州变故
006 神武观主
007 慕容璇玑
008 沙洲城堡
009 端倪乍现
010 大战周朱

==> 1.dat <==
001
002
003
004
005
006
007
008
009
010

==> 2.dat <==
002
003
004
005
006
007
008
009
010
011

==> a.dat <==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="htmlbook.css" />
<title>第1课 谋杀的道德侧面 The moral side of murder </title>
</head>
<body>
<div>

==> b.dat <==
<a href="javascript:goPrevious()">上一页<a/> | <a href="javascript:goNext()">下一页<a/>
<script type="text/javascript">
var filename=location.href;
filename=filename.substr(filename.lastIndexOf('/')+1);
//下一页
function goNext(){
goPage(parseInt(filename,10)+1);
}
//上一页
function goPrevious(){


 

 

# htmlbook结构

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="htmlbook.css" />
<title>001 河州小镇</title>
</head>
<body>
<div>
<p>章节内容</p>
<a href="javascript:goPrevious()">上一页<a/> | <a href="javascript:goNext()">下一页<a/>
<script type="text/javascript">
var filename=location.href;
filename=filename.substr(filename.lastIndexOf('/')+1);
//下一页
function goNext(){
goPage(parseInt(filename,10)+1);
}
//上一页
function goPrevious(){
goPage(parseInt(filename,10)-1);
}
//进入页号为pagenumber的页面
function goPage(pagenumber){
if(pagenumber<10) pagenumber = "00"+pagenumber;
else pagenumber = "0"+pagenumber;
window.location.href=pagenumber+".html";
}
</script>
<a href="index.html">Index</a>
</div>
</body>
</html>

Dec 23

 

给htmlbook添加:“上一页/下一页”的功能

文件

 

01.html 04.html 07.html 10.html 13.html 16.html 19.html 22.html
02.html 05.html 08.html 11.html 14.html 17.html 20.html 23.html
03.html 06.html 09.html 12.html 15.html 18.html 21.html 24.html

以前是直接把使用shell添加代码进去的,现在想使用js来实现。奈何困难重重,只好探索一下。

#关键词是<table

page.js的内容如下

<a href="javascript:goPrevious()">上一页<a/> | <a href="javascript:goNext()">下一页<a/>
<script type="text/javascript">
var filename=location.href;
filename=filename.substr(filename.lastIndexOf('/')+1);
//下一页
function goNext(){
goPage(parseInt(filename,10)+1);
}
//上一页
function goPrevious(){
goPage(parseInt(filename,10)-1);
}
//进入页号为pagenumber的页面
function goPage(pagenumber){
if(pagenumber<10) pagenumber = "0"+pagenumber;
window.location.href=pagenumber+".html";
}
</script>


shell部分

 

#!/bin/bash
js=`cat page.js | tr '\n' '\034' | tr ' ' '\032'|tr '\t' '\033'`
for i in ??.html;do
new=`sed "s#<table#$js<table#" $i`
echo "$new" | tr '\034' '\n' | tr '\032' ' ' | tr '\033' '\t'>$i
done

参考资料:

Nov 25

 


To creat or remove file(s) and directory(ies) with a - in the head was tricky.


想在当前目录/tmp创设 -a -b 文件
似乎加什么引号都不大行.
-和"参数引导符"(我捏造的一个词)同一,冲突了.使用绝对路径,能够回避它.

touch /tmp/{-a,-b}


删除的时候,也是使用绝对路径.

对于目录的创设和删除同样适合.

12月23日修正:相对路径也是可以的。

Jan 10

 

fluxbox與openbox備忘錄

用過各種box,唯有這兩個box用起來比較順手。兩者有差別,但是不是很大。

1、wbar展示的常用的軟件




這個bar是wbar,就是veket的bar。

2、別的沒有展示在wbar的軟件。

Jan 4

英文原文:http://wiki.linuxquestions.org/wiki/dd

中文翻译:I

dd是一个通过读取硬盘(比如你的硬盘)的全部块实现磁盘转储的工具. However,its architecture is laid out so it can do much more than creating a dump. 看下面表格的内容.

内容
1. 磁盘备份
    1.1 创建备份
    1.2 还原备份
    1.3 克隆一个硬盘
    1.4 传输磁盘镜像
2. 创建CD光盘iso镜像
3. 急救一个包含有坏块的文件
4. 分析你的磁盘
5. 创建你自己的引导器
6. 测试你的磁盘表现
7. Windows pendant
8. 请参阅

磁盘备份


创建一个备份