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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/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
Linux 如何使用'file | grep<;字符串>;`在find命令中?_Linux_File_Find_Dcmtk - Fatal编程技术网

Linux 如何使用'file | grep<;字符串>;`在find命令中?

Linux 如何使用'file | grep<;字符串>;`在find命令中?,linux,file,find,dcmtk,Linux,File,Find,Dcmtk,听起来简单而天真,我正在努力使用find和file命令。我使用-exec file,因为我需要获取的特定文件在文件名中没有扩展名,这消除了查找中的-name选项的可能性。请参见下面的myfind命令和工作区: 我当前的代码: workspace=/PATH/ ###---递归定位所有所需文件的层次结构示例: #####----(“$workspace”/ID/ID/DICOM/cat) #######----“cat”是一个.dcm文件,名称中没有“.dcm” 宠物=`找到-类型f-exec文件

听起来简单而天真,我正在努力使用
find
file
命令。我使用
-exec file
,因为我需要获取的特定文件在文件名中没有扩展名,这消除了
查找
中的
-name
选项的可能性。请参见下面的my
find
命令和工作区:

我当前的代码:
workspace=/PATH/
###---递归定位所有所需文件的层次结构示例:
#####----(“$workspace”/ID/ID/DICOM/cat)
#######----“cat”是一个.dcm文件,名称中没有“.dcm”
宠物=`找到-类型f-exec文件{}\|格雷普“DICOM”`
我的当前输出,看起来像是
find
的典型输出:
/PATH/ID/ID/DICOM/cat:DICOM医疗成像数据
(1)

默认情况下,我会这样做以将其分配给变量:

PETS=($(find.-type f-exec文件{}\| grep“DICOM”))
但是,我仅通过此输出获得第一个实例(当有许多其他DICOM文件位于与工作目录相关的位置时),这几乎是(1)中我当前输出的截断版本

/PATH/ID/ID/DICOM/cat:
(2)


我如何从(1)或(2)中,或通过修改我的
find
命令获取文件本身,以便将其输入到?

语法有点复杂,但是,如果您可以从
-exec
操作中调用
文件
grep
,那么您可以继续链接其他操作,而不需要任何中间变量

方法是创建一个显式的子shell,其中包含
文件| grep
管道:
sh-c'文件“$1”| grep-q DICOM'
<代码>“$1”
是要检查的文件的占位符,因为shell脚本就是这样获取参数的。(在脚本中嵌入
{}
不是一个好主意。我们会遇到空格和引号等特殊字符的问题。)

那么我们如何设置
$1
?答案是在shell命令中添加参数:
sh-c''arg0 arg1 arg2…
将位置参数
$0
$1
$2
等设置为字符串
arg0
arg1
arg2
,等等。让我们这样做吧。我们可以将
$0
设置为
sh
,即外壳的名称;和
$1
{}
,即
查找
中的文件名

整个
-exec
操作可以被视为通过或失败的测试,与类似
-type f
的简单测试没有区别。我们可以链接其他条件操作,例如调用
dcmdump

我们一起得到:

find . -type f -exec sh -c 'file "$1" | grep -q DICOM' sh {} \; -exec dcmdump {} +

dcmdump支持在目录中递归搜索文件。当使用选项+fo(--read file only)调用时,您还可以确保此工具仅处理(即解析)DICOM文件。