我试图使用find -exec与多个命令没有任何成功。有人知道以下命令是否可行?
find * .txt -exec echo“$(tail -1‘{}’),$(ls’{}’)”\;
巴
另一种方式是这样的:
multiple_cmd() { tail -n1 $1; ls $1 }; export -f multiple_cmd; find *.txt -exec bash -c 'multiple_cmd "$0"' {} \;
在一条线上
multiple_cmd() { tail -1 $1; ls $1 }; export -f multiple_cmd; find *.txt -exec bash -c 'multiple_cmd "$0"' {} \;
multiple_cmd()
export -f multiple_cmd
find *.txt -exec bash -c 'multiple_cmd "$0"' {} \;
通过这种方式,multiple_cmd可以根据需要同样长且复杂。
希望这可以帮助。
find . -type d -exec sh -c "echo -n {}; echo -n ' x '; echo {}" \;
有一种更简单的方法:
find ... | while read -r file; do echo "look at my $file, my $file is amazing"; done
或者:
while read -r file; do echo "look at my $file, my $file is amazing"; done <<< "$(find ...)"
find 接受多个 -exec 部分到命令。例如:
find
-exec
find . -name "*.txt" -exec echo {} \; -exec grep banana {} \;
请注意,在这种情况下,第二个命令仅在第一个命令成功返回时运行,如@Caleb所述。如果您希望两个命令都运行而不管它们是成功还是失败,您可以使用以下构造:
find . -name "*.txt" \( -exec echo {} \; -o -exec true \; \) -exec grep banana {} \;
以下之一:
find *.txt -exec awk 'END {print $0 "," FILENAME}' {} \; find *.txt -exec sh -c 'echo "$(tail -n 1 "$1"),$1"' _ {} \; find *.txt -exec sh -c 'echo "$(sed -n "\$p" "$1"),$1"' _ {} \;
应该使用xargs :)
find *.txt -type f -exec tail -1 {} \; | xargs -ICONSTANT echo $(pwd),CONSTANT
另一个(在osx上工作)
find *.txt -type f -exec echo ,$(PWD) {} + -exec tail -1 {} + | tr ' ' '/'