分页: 1 / 1

shell 脚本针对windows的文件

发表于 : 2011-07-15 11:22
i_like_ubuntu
我把脚本改了一点,让打出不能赋权限的文件。
发现,doc文件不能赋 文件名中有空格的和 - 短横杠的也不能 没有后缀名的不能赋

一下是打印的信息 (局部)问题路径下面的是问题文件



普通文件已赋权限
普通文件已赋权限
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi/uvision3
keil_spi_example_Target
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi/uvision3
1.dep
普通文件已赋权限
目录文件已赋值
普通文件已赋权限
普通文件已赋权限
普通文件已赋权限
普通文件已赋权限
目录文件已赋值
普通文件已赋权限
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/uart3/uvision3
keil_uart_Target
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/uart3/uvision3
1.dep
普通文件已赋权限
目录文件已赋值
普通文件已赋权限
目录文件已赋值
普通文件已赋权限
普通文件已赋权限
普通文件已赋权限
普通文件已赋权限
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1
Realview
问题路径/home/ftper/开发板资料/YL-LPC3250/CD1
MDK
目录文件已赋值
目录文件已赋值


-------------------------------------------------------------------

修改后的脚本函数

代码: 全选

set_Permissions()
{
	
	for filename in  `ls`                       # 当前目录下的所有文件作为list
	do
		if test -d "$filename"              # 如果文件存在且为普通文件
		then
			(
			chmod 777 "$filename"     ;       #赋权限
			echo  "目录文件已赋值 "   ;
			cd "$filename"              ;
                        set_Permissions               #  给目录文件赋值,并进入目录文件,递归函数  
			)
		elif test -f "$filename"
		then            
		(
			chmod 644     "$filename"    ;
			echo "普通文件已赋权限 "     ;
		
		)
		else
		(
			echo "问题路径`pwd`"
			echo  $filename
		)	
		fi
	done
}

Re: shell 脚本针对windows的文件

发表于 : 2011-07-15 21:26
我就是我2
不知道。我也写过修改权限的东东。
目录修改为755 文件修改为644
[bash]
#!/bin/bash
_PATH=/media/Dropbox
cd ${_PATH}
_FILES=$(find | grep -v '^\.$') # 显示所有文件和目录,并排除当前目录
for i in ${_FILES};do
if [ -d $i ];then
chmod 755 $i
elif [ -f $i ];then
chmod 644 $i
fi
done
[/bash]

Re: shell 脚本针对windows的文件

发表于 : 2011-07-15 21:37
tusooa
别`ls`
for filename in *
不然有空格不好办。

Re: shell 脚本针对windows的文件

发表于 : 2011-07-15 23:04
我就是我2
回复 5# slother


IFS是内部域分隔符,默认是空格,tab,和新行.
如果文件名含有空格,在for中将会被拆开成二部分.因此要改变默认的IFS.
如果你一定要用for循环的话,try
OLDIFS=$IFS
IFS=:
for i in `find ./ -name "*.txt"`
do
iconv -f gb2312 -t utf8 $i -o $i
done
IFS=$OLDIFS
修改IFS :em20 :em20 :em20
或者使用引号,不过M$你已经使用了引号
http://bbs.chinaunix.net/thread-1926164-1-1.html

Re: shell 脚本针对windows的文件

发表于 : 2011-07-16 0:08
ChenFengyuan
这个事情要从源头做起,就是改vsftpd的配置来做到.

不过一个chmod也能解决

代码: 全选

chmod -R a=r,u+w,a+X

Re: shell 脚本针对windows的文件

发表于 : 2011-07-16 10:24
i_like_ubuntu
tusooa 写了:别`ls`
for filename in *
不然有空格不好办。

:em21
按您的修改后 死机重启了

Re: shell 脚本针对windows的文件

发表于 : 2011-07-16 12:37
fnan
做了个测试:
kose5@kose5-Aspire-4552:~/b/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi$ ls
ua u a u-a ua.doc
kose5@kose5-Aspire-4552:~/b/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi$ for i in `ls`;do [ -f "$i" ] && echo [$i] ok || echo ???[$i]???;done
[ua] ok
??????
???[a]???
[u-a] ok
[ua.doc] ok
kose5@kose5-Aspire-4552:~/b/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi$ for i in `*`;do [ -f "$i" ] && echo [$i] ok || echo ???[$i]???;done
ua: command not found
kose5@kose5-Aspire-4552:~/b/ftper/开发板资料/YL-LPC3250/CD1/BIOS和测试例程源码/YL3250测试例程/examples/spi$ ls -1|while read i;do [ -f "$i" ] && echo [$i] ok || echo ???[$i]???;done
[ua] ok
ok
[u-a] ok
[ua.doc] ok

Re: shell 脚本针对windows的文件

发表于 : 2011-07-16 12:55
fnan
直接用find不更省事吗?
find -mindepth 1 -type d -exec chmod 777 {} \;
find -type f -exec chmod 644 {} \;

Re: shell 脚本针对windows的文件

发表于 : 2011-07-16 15:45
i_like_ubuntu
fnan 写了:直接用find不更省事吗?
find -mindepth 1 -type d -exec chmod 777 {} \;
find -type f -exec chmod 644 {} \;

谢谢你丫 :em05

我再仔细看看你的代码 :em11

这是我第一次写sehll脚本 :em06

翻着书看语法写的 还好和c语言差别小 :em04

Re: shell 脚本针对windows的文件

发表于 : 2011-07-17 1:01
我就是我2
i_like_ubuntu 写了:
fnan 写了:直接用find不更省事吗?
find -mindepth 1 -type d -exec chmod 777 {} \;
find -type f -exec chmod 644 {} \;

谢谢你丫 :em05

我再仔细看看你的代码 :em11

这是我第一次写sehll脚本 :em06

翻着书看语法写的 还好和c语言差别小 :em04
是shell :em20 :em20 :em20

Re: shell 脚本针对windows的文件

发表于 : 2011-07-17 15:04
i_like_ubuntu
我就是我2 写了:
i_like_ubuntu 写了:
fnan 写了:直接用find不更省事吗?
find -mindepth 1 -type d -exec chmod 777 {} \;
find -type f -exec chmod 644 {} \;

谢谢你丫 :em05

我再仔细看看你的代码 :em11

这是我第一次写sehll脚本 :em06

翻着书看语法写的 还好和c语言差别小 :em04
是shell :em20 :em20 :em20

我的意思是 还好shell和c语言差别不大

语法好理解