我只是想列出当前目录下的所有目录和文件,并使用以下命令写出它们是文件还是目录:
find -exec echo `echo {} : ;if [ -f {} ]; then echo file; else echo directory;fi` \;
我知道这是一个愚蠢的命令,我可以使用诸如-type f
或的其他方式-type d
,但是我想了解为什么这段代码无法按预期工作。它只是将目录打印到所有这些文件。例如,当输出find
为时:
.
./dir
./dir/file
我的代码输出是:
. : directory
./dir : directory
./dir/file : directory
和输出
echo `echo dir/file : ;if [ -f dir/file ]; then echo file; else echo directory;fi`
是
dir/file : file
我正在研究Ubuntu 14.10
和使用find (GNU findutils) 4.4.2
感谢@Costas,但我知道使用bash或sh可以达到我的最初目标,但是现在我想了解为什么exec参数的行为不同。
—
Esref
将参数放在引号中
—
Costas
"{}"
。为什么要使用echo
两次?
我已经尝试过了,它给出了相同的输出。找到-exec echo
—
Esref
echo "{}" : ;if [ -f "{}" ]; then echo file; else echo directory;fi
\;
find -exec bash -c 'echo -n "{} : ";if [ -f "{}" ]; then echo file; else echo directory;fi' \;