簡體   English   中英

bash變量中帶有括號的文件夾名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM