Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash find命令时在列表中指定文件_Bash_File - Fatal编程技术网

使用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循环一次只检查一个。如果其中一个无效,我需要中止,不做任何工作