[英]Bash scripting print list of files
這是我第一次使用BASH腳本,一直在尋找一些教程,但無法弄清楚一些代碼。 我只想列出文件夾中的所有文件,但我做不到。 到目前為止,這是我的代碼。
#!/bin/bash
# My first script
echo "Printing files..."
FILES="/Bash/sample/*"
for f in $FILES
do
echo "this is $f"
done
這是我的輸出
正在打印文件...這是/ Bash / sample / *
我的代碼有什么問題?
您誤解了bash中“ in”一詞的含義。 for f in $FILES
語句僅對$FILES
字符串中的(用空格分隔)單詞進行迭代,其值是“ / Bash / sample”(一個單詞)。 您似乎希望文件位於命名目錄中,這是bash語法不假定的空間隱喻,因此您必須明確地告訴它列出文件。
for f in `ls $FILES` # illustrates the problem - but don't actually do this (see below)
...
可能會做到。 這會將ls
命令的輸出轉換為字符串“ in”,每個文件中只有一個單詞。
注意:此示例是為了幫助理解“ in”的含義,但不是一個好的通用解決方案。 一旦其中一個文件名稱中有空格,它將遇到麻煩-這些文件將為列表貢獻兩個或多個單詞,每個單詞單獨使用可能不是有效的文件名。 這突顯了(a)您應該始終采取額外的步驟來解決bash和類似shell中的空格問題,並且(b)您應該避免在自己的文件名和目錄名中使用空格,因為否則會遇到很多其他問題尚未努力遵守(a)的有用的第三方腳本和實用程序。 不幸的是,適當的遵從性經常會導致bash中語法的混淆。
我認為路徑“ /Bash/sample/*
”中存在問題。
您需要將此位置更改為絕對位置,例如:
/home/username/Bash/sample/*
或使用相對路徑,例如:
~/Bash/sample/*
在大多數系統上,這完全等效於:
/home/username/Bash/sample/*
其中username是您的當前用戶名,請使用whoami
查看您的當前用戶名。
學習Bash的最佳場所: http : //www.tldp.org/LDP/abs/html/index.html
這應該工作:
echo "Printing files..."
FILES=(/Bash/sample/*) # create an array.
# Works with filenames containing spaces.
# String variable does not work for that case.
for f in "${FILES[@]}" # iterate over the array.
do
echo "this is $f"
done
&您不應該解析ls輸出 。
列出您的文件)
如果要列出文件列表並查看它們:
ls ###Takes list###
ls -sh ###Takes list + File size###
...
如果要將文件列表發送到文件以讀取並稍后檢查它們:
ls > FileName.Format ###Takes list and sends them to a file###
ls > FileName.Format ###Takes list with file size and sends them to a file###
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.