使用bash find命令时在列表中指定文件
我想看看是否可以将使用bash find命令时在列表中指定文件,bash,file,Bash,File,我想看看是否可以将find命令的输出分配给一个变量。在这种情况下,它将是一个列表,并一次迭代一个文件以评估该文件 我试过这个: #!/bin/bash PATH=/Users/mike/test LIST='find $PATH -name *.txt' for newfiles in @LIST; do #checksize echo $newfiles done 我的输出是: @LIST 我尝试着在bash中使用perl中的glob命令来做同样的事情 var = glo
find
命令的输出分配给一个变量。在这种情况下,它将是一个列表,并一次迭代一个文件以评估该文件
我试过这个:
#!/bin/bash
PATH=/Users/mike/test
LIST='find $PATH -name *.txt'
for newfiles in @LIST; do
#checksize
echo $newfiles
done
我的输出是:
@LIST
我尝试着在bash中使用perl中的glob命令来做同样的事情
var = glob "PATH/*.txt";
使用$(command)
执行命令
,并用其输出替换该构造
list=$(find "$PATH" -name '*.txt')
要访问变量,请将$
放在名称之前,而不是@
(您的perl
体验正在显示)
但是,像这样解析find
的输出是很危险的,因为如果任何文件名包含空格,就会得到不正确的结果——它将被视为多个名称。最好通过管道输出:
find "$PATH" -name '*.txt' | while read -r newfiles; do
echo "$newfiles"
done
另外,请注意,如果变量包含空格,则应引用不希望拆分为多个单词的任何变量
并避免使用所有大写的变量名。这通常是为环境变量保留的。使用$(command)
执行命令
,并用其输出代替该构造
list=$(find "$PATH" -name '*.txt')
要访问变量,请将$
放在名称之前,而不是@
(您的perl
体验正在显示)
但是,像这样解析find
的输出是很危险的,因为如果任何文件名包含空格,就会得到不正确的结果——它将被视为多个名称。最好通过管道输出:
find "$PATH" -name '*.txt' | while read -r newfiles; do
echo "$newfiles"
done
另外,请注意,如果变量包含空格,则应引用不希望拆分为多个单词的任何变量
并避免使用所有大写的变量名。这通常是为环境变量保留的。假设您使用的是
bash
4或更高版本,请不要在此处使用find
shopt -s globstar nullglob
list=( "$path"/**/*.txt )
for newfile in "${list[@]}"; do
echo "$newfile"
done
假设您使用的是
bash
4或更高版本,请不要在此处使用find
shopt -s globstar nullglob
list=( "$path"/**/*.txt )
for newfile in "${list[@]}"; do
echo "$newfile"
done
列表=$(查找$PATH-name*.txt)
对于$LIST中的新文件;做
请注意,如果任何文件的名称中有空格,您将遇到问题。LIST=$(find$PATH-name*.txt)
对于$LIST中的新文件;做
请注意,如果任何文件的名称中有空格,您将遇到问题。不要将
PATH
用作变量名;它已经有了特定的含义。不要使用PATH
作为变量名;它已经有了一个特定的含义。我没有任何空白的文件被搜索。我们尽量避免它。但管道输出看起来更漂亮、更干净。这个词非常感谢你的指点。写防御代码是最好的。也许有人会错误地添加这样的文件,那么您的脚本将失败。为了完全防御,您还需要说明包含换行符的文件名。我希望列表中包含这些文件的另一个原因是,我想在处理它们之前先验证它们。比如检查尺寸,如果合适就交换。我认为while循环一次只检查一个。如果其中一个是无效的,我需要中止,不做任何工作,我没有任何空白的文件被搜索。我们尽量避免它。但管道输出看起来更漂亮、更干净。这个词非常感谢你的指点。写防御代码是最好的。也许有人会错误地添加这样的文件,那么您的脚本将失败。为了完全防御,您还需要说明包含换行符的文件名。我希望列表中包含这些文件的另一个原因是,我想在处理它们之前先验证它们。比如检查尺寸,如果合适就交换。我认为while循环一次只检查一个。如果其中一个无效,我需要中止,不做任何工作