[英]Folder name with Parentheses in bash variable
因此,我在文件夾名稱中用空格括起來:
文件夾\\文件夾(2000)\\ file.srt
文件夾\\文件夾(1990)\\ file.srt
for file in `find . -name "*.srt"`
do
echo "file = $file";
done
不要在我的腳本中工作。 有人可以幫我嗎?
您可以為此使用find -exec
:
find . -name "*.srt" -exec echo "file = {}" \;
輸出:
file = ./folder/folder (1990)/file.srt
file = ./folder/folder (2000)/file.srt
問題在於, find(1)
生成的文件名中的空格正散布到用\\n
分隔的名稱中,並且for
命令將它們全部取而代之。
最好的方法(也是一種保存命令的方法)是將find(1)
與-print0
選項一起使用,該命令將打印由空字符分隔的文件名,然后將xargs
命令與-0
選項一起使用,該命令期望將null作為分隔符。 這樣,您可以使用系統可以承受的盡可能多的參數來執行命令。 例如
find . -type f -name "* *" -print0 | xargs -0 cat
將打印名稱中帶有空格的所有文件的內容。
在您的示例中,您希望對每個數據行進行一些腳本編寫,因此更好的方法是使用read
shell命令,如(在這種情況下,您不需要-print0
選項,因為文件是分隔的用換行符,因此您每次讀取都會讀取一個文件)
find . -name "*.srt" | while read file
do
echo "file = ${file}"
done
但是在這種情況下,您將無法有效地使用xargs(1)
,將盡可能多的參數放在被調用命令的命令行中。 您將一次處理每個文件一個文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.