❶ linux shell腳本中如何獲取文件的絕對路徑readlink可以么
傳給函數的路徑是/root/file,如果這是函數的第一個參數,那麼函數中可以用
$1
獲取。
得到文件名file1和file2後,echo
"$1/file1"
就輸出/root/file/file1,echo
"$1/file2"
輸出/root/file/file2。
❷ linux shell腳本怎麼獲取目錄下所有txt文件名稱
執行抄如下三條命令即可:
(1)、$script myresultfile
(2)、$ls -al *.txt
(3)、$exit
此時,該目錄下的所有 txt 文件名稱就會以長格式保存在 myresultfile 文件中了。
然後你再使用 SHELL 編程的功能把那些無用的列去掉即可。
❸ Linux的shell腳本中如何獲得指定目錄下的文件名
#/bin/bash
ls/home/user/test>txt
echo"該目錄中有文件"`head-1txt`
rm-rftxt
❹ linux shell 有關文件的讀取
幾點問題:
1)管道符後面的命令都是要新建shell去執行的,也就是說,while循環中的內容都不是在當前shell中執行,而array是在while循環中賦值的,所以當執行完while循環返回到當前shell後,array的值丟失。
這一點必須清楚:新建shell可以繼承當前shell的變數,相當於拷貝了變數的一個副本,而命令執行完退出新建shell後,新建shell中的變數也都隨之湮滅。
2)awk本身就是逐行讀入並處理文件的,while read line 也是這樣,功能上有重疊,一般用其一即可,特殊情況除外。
3)這就一個欄位而已,何必用數組array呢?當然,你要用數組也是可以的,只是我有點不理解。
4)如果$1是一個文件,不需要cat後再通過管道符傳遞,awk本身就可以直接處理文件
awk -F= '$1 ~ /'$args'/ {print $2}' $1 就可以,管道符能少用則少用。
修改建議:
保留awk,去除while read line,試試:
array=(`awk-F='$1~/'$args'/{print$2}'$1`)
echo${array[0]}
如果要保留你的while read line結構,那麼:
whilereadline
do
array=(`echo"$line"|awk-F='$1~/'$args'/{print$2}'`)
done<$1
echo${array[0]}
❺ linux bash shell中如何讀取文件
先截取首行,然後從首行中截第3、4個欄位放入到文件BBB中
sed -n '1p' AAA | awk '{print $3" "$4}' >BBB
❻ linux Shell怎麼查找指定文件,並進入該文件所在目錄,目錄有空格
1.使用絕對路徑執行的shell文件(如/home/xxx/binfile)
直接使用dirname $0即可
2.對於使用相對路徑執行的shell文件(如 ./xxx/binfile)
pwd與dirname結合使用;pwd獲得的是執行當前shell文件時,用戶所在的位置;dirname可以獲得相對於那個位置的偏移:
例如某shell文件所在的位置是/home/user_name/work2/SNS3_server_im/Developing/trunk/im_capp/src/notify_serv/shell文件名
1 #!/bin/sh
2 pwd
3 echo `dirname $0`
執行後輸出
/home/user_name/work2/SNS3_server_im/Developing/trunk/im_capp/src
./notify_serv
❼ linux shell 讀取一個配置文件並獲取其中的全部內容,急!!!!!!!
下面是讀取復配置文件,製作為變數顯示出來,實例如下:
[lotto@ftptest2 ~]$ cat boot.ini
path='/data/source'
username='myuser'
password='mypassword'
[lotto@ftptest2 ~]$ cat test.sh
#!/bin/sh
eval `cat ./boot.ini`
echo "$username"
echo "$path"
echo "$password"
[lotto@ftptest2 ~]$ ./test.sh
myuser
/data/source
mypassword
❽ Shell獲取某目錄下所有文件夾的名稱
方法有三,如下:
#!/bin/bash
#方法一
dir=$(ls-lD:/temp/|awk'/^d/{print睜罩粗$NF}')
foriin$dir
do
echo$i
done
#######
#方法二
fordirin$(lsD:/tmep/)
do
[-d$dir]&&echo$dir
done
##方法三
ls-lD:/temp/|awk'/^d/{print$NF}'
##其實同方法一,直接就可以顯示不用for循環
大致思路:
<?php
function traverseDir($dir){
if($dir_handle = @opendir($dir)){
while($filename = readdir($dir_handle)){
if($filename != "." && $filename != ".."){
$subFile = $dir.DIRECTORY_SEPARATOR.$filename; 要將源目錄及子文件相連
if(is_dir($subFile)){ 若子文件是個目錄
echo $filename.'<br>' 輸出該目錄名稱
traverseDir($subFile); 遞歸找出下級目錄名稱
}
}
}
closedir($dir_handle);
}
}
$dirNames = traverseDir("d:/dos"); 測試某目錄
?>
呵呵,原來是團友啊我寫了一個!Set ws=WScript.CreateObject("wscript.shell")
w=ws.CurrentDirectory
Set fso=WScript.CreateObject("scripting.filesystemobject")
Set fs=fso.GetFolder(w)
Set f=fs.SubFolders
For Each uu In f
t=t & uu.Path & vbcrlf
Next
MsgBox t
用FSO對象模型不是很好么,這種代碼看的好痛苦哇!
我在之前做過一個FTP的客戶端工具。
drw 文件夾
-rw 文件(有擴展名或無擴展名)
我是根據服務端返回的報文進行分析獲取的列表。
給你一些代碼片段:
/ <summary>
/ 獲取指定目錄下的文件和文件夾。
/ </summary>
/ <param name=path>要獲取的目錄</param>
/ <param name=WRMethods>要發送到FTP伺服器的密令。</param>
/ <returns></returns>
public string[] GetFileList(string path, string WRMethods)從ftp伺服器上獲得文件列表
{
WebResponse response;
string[] downloadFiles;
int conut = 4;
StringBuilder result = new StringBuilder();
Connect(path);
if (FTPVariable.IsUseProxy_ftp)
{
reqFTP.Proxy = FtpProxy.GetFtpSelectProxy(FTPVariable.FtpCommand_transferProxyName);
}
reqFTP.ReadWriteTimeout = 12000;
如果不應銷毀到伺服器的連接,則為 true;否則為 false。默認值為 true。
reqFTP.Method = WRMethods;
try
{
response = (FtpWebResponse)reqFTP.GetResponse();
goto Ftp_lbl_03;
}
catch (WebException webex)
{
GetReply(webex.Message);
if (ReplyCode == 530) 未登錄。
{
goto Ftp_lbl_04;
}
else if (ReplyCode == 550)
{
goto Ftp_lbl_04;
}
else
{
FtpManage.SetLog("獲取列表超時,等候1秒後重試!");
goto Ftp_lbl_01;
}
}
Ftp_lbl_01:
try
{
FtpManage.SetLog("正在連接伺服器 " + FtpRemoteHost);
response = GetRequest(path, WRMethods);
}
catch (WebException)
{
FtpManage.SetLog("獲取列表超時,等候1秒後重試!");
downloadFiles = null;
System.Threading.Thread.Sleep(1000);
if (conut == 0)
{
goto Ftp_lbl_02;
}
conut--;
goto Ftp_lbl_01;
}
catch (Exception ex)
{
MSG.Show(ex.Message, Global.GetRS["msgTilteError"], MessageBoxButton.OK, MsgIco.Error);
FtpManage.SetLog("命令執行失敗,原因:" + ex.Message);
downloadFiles = null;
return downloadFiles;
}
Ftp_lbl_03:
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("
");
line = reader.ReadLine();
}
if (result.Length == 0)
{
return null;
}
to remove the trailing '
'
result.Remove(result.ToString().LastIndexOf('
'), 1);
reader.Close();
response.Close();
FtpManage.SetLog("命令已成功執行");
return result.ToString().Split('
');
Ftp_lbl_04:
FtpManage.SetLog(ReplyInfo);
return null;
Ftp_lbl_02:
FtpManage.SetLog("550 獲取列表失敗,無法連接遠程伺服器!");
FtpManage.ftpmanage.IsRefurbish = true;
return null;
}
/ <summary>
/ 獲取指定目錄下的文件和文件夾。
/ </summary>
/ <param name=path>要獲取的目錄</param>
/ <returns></returns>
public string[] GetFileList(string path)從ftp伺服器上獲得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectory);
}
/ <summary>
/ 獲取指定目錄下的文件和文件夾。
/ </summary>
/ <returns></returns>
public string[] GetFileList()從ftp伺服器上獲得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/", WebRequestMethods.Ftp.ListDirectory);
}
/ <summary>
/ 獲取目錄和文件名,返回目錄表。
/ </summary>
/ <param name=path>要獲取的目錄</param>
/ <returns></returns>
public string[] GetCatalog_FileList(string path)
{
string[] fountainhead = GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
string[] Catalog = null;
if (fountainhead == null)
{
return null;
}
Catalog = new string[fountainhead.Length];
for (int i = 3; i < fountainhead.Length; i++)
{
Catalog[i - 3] += fountainhead[i].Substring(55, fountainhead[i].Length - 55) + "&";FileName
Catalog[i - 3] += fountainhead[i].Substring(30, 12) + "&";FileSize
Catalog[i - 3] += fountainhead[i].Substring(42, 13) + "&";AmendDate
Catalog[i - 3] += fountainhead[i].Substring(0, 3) + "&";
}
return Catalog;
}
fso.GetFolder(path)
你剛才不是問過了么?
查找某目錄下所有 文件 及 子文件夾
試一試不用 FileSystemObject 對象,只用基本控制項的代碼。
'例子需控制項:Command1,List1,List2,File1,Dir1,都採用默認屬性。
'例如,查找 C: ,帶 '** 的語可修改
Dim ctFind As Boolean
Private Sub Form_Load()
Me.Caption = "查找所有文件及文件夾"
Command1.Caption = "查找"
List2.Visible = False: File1.Visible = False: Dir1.Visible = False
Label1.Caption = "就緒"
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Form_Resize()
Dim W As Long
On Error Resume Next
W = 720
List1.Move 0, 0, Me.ScaleWidth - W - 120, Me.ScaleHeight - 300
Command1.Move Me.ScaleWidth - W - 60, 300, W
Label1.Move 90, Me.ScaleHeight - 255, Screen.Width, 255
End Sub
Private Sub Command1_Click()
ctFind = Not ctFind
If ctFind Then
Command1.Caption = "取消"
Call FindDirFile("C:") '**查找 C: 下的所有文件和目錄,或 C:Windows 等
Command1.Caption = "查找"
Else
Command1.Caption = "查找"
End If
End Sub
Private Sub FindDirFile(ByVal nPath As String)
Dim I As Long, nDir As String, Ci As Long
ctFind = True
List1.Clear: List2.Clear
If Right(nPath, 1) <> "" Then nPath = nPath & ""
List1.AddItem "查找 " & nPath: List2.AddItem nPath
File1.Pattern = "*"
File1.System = True: File1.Hidden = True: File1.ReadOnly = True
On Error GoTo Cuo
Dir1.Path = nPath
On Error GoTo 0
Do
If List2.ListCount = 0 Then Exit Do
nPath = List2.List(0)
List2.RemoveItem 0
Dir1.Path = nPath
For I = 0 To Dir1.ListCount - 1
GoSub ShowGe
nDir = Dir1.List(I)
If Right(nDir, 1) <> "" Then nDir = nDir & ""
List1.AddItem "■" & nDir
List2.AddItem nDir
Next
File1.Path = nPath
For I = 0 To File1.ListCount - 1
GoSub ShowGe
List1.AddItem " " & nPath & File1.List(I)
Next
Loop
Label1.Caption = "查找完畢,共找到 " & List1.ListCount & " 個條目"
ctFind = False
Exit Sub
Cuo:
List1.AddItem "起始目錄不存在:" & nPath
ctFind = False
Exit Sub
ShowGe:
Ci = Ci + 1
If Ci < 99 Then Return
Ci = 0
Label1.Caption = "已找到 " & List1.ListCount & " 個:" & nPath
DoEvents
If ctFind Then Return
End Sub
執行如下三條命令即可:
(1)、$script myresultfile
(2)、$ls -al *.txt
(3)、$exit
此時,該目錄下的所有 txt 文件名稱就會以長格式保存在 myresultfile 文件中了。
然後你再使用 SHELL 編程的功能把那些無用的列去掉即可。
❾ 如何在 Linux Shell 編程中優雅地獲取單個文件大小
通常stat命令可以獲取文件的信息,例如
[root@bogon ~]# stat install.log
File: `install.log'
Size: 26593 Blocks: 64 IO Block: 4096 regular file
Device: 803h/2051d Inode: 11523074 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-03 15:00:53.424917114 +0800
Modify: 2014-12-03 15:02:57.999917114 +0800
Change: 2014-12-03 15:03:01.367917114 +0800
如果只要Size的大小,那麼可以
stat -c%s <文件名>
例如
[root@bogon ~]# stat -c%s install.log
26593
❿ linux shell 如何讀取文件特定位置的數據
題主你好,
測試所用的文本文件t1內容如下:
=====
希望可以幫到題主, 歡迎追問.