我有一个文件列表,我想通过管道来测试每个文件是否存在
cat files.txt | command
是否存在任何命令?我必须写一个脚本吗?你能帮我写一下吗?
例如:
> cat files.txt
libs/cakephp/app_exp/views/elements/export-menu.ctp
libs/cron/prad_import.php
main/css/admin/remarketing-graph.css
main/images/dropd-arrow.png
main/includes/forms/export/export_menu.php
main/jquery/jquery/jquery.cookie.js
main/mvc/controllers/remarketing/prad_controller.php
main/mvc/controllers/remarketing/remarketing_controller.php
但是有些文件没有退出,所以我想做
> cat files.txt | command
libs/cakephp/app_exp/views/elements/export-menu.ctp
main/css/admin/remarketing-graph.css
main/images/dropd-arrow.png
main/includes/forms/export/export_menu.php
main/jquery/jquery/jquery.cookie.js
仅返回现有文件
答案 0 :(得分:1)
test -f "files.txt" && cat "files.txt" | command
另外
[[ -f "files.txt" ]] && cat "files.txt" | command # in BASH
接受你的选择。 test
更便携。
了解您希望command
测试文件是否存在,那么您根本不需要管道。您可以使用while
循环执行此类操作:
while read file; do
if test -f "$file"; then
echo "the file exists" # or whatever you want to do
else
echo "the file does NOT exist" # or whatever you want to do
fi
done < "files.txt"
这将逐行读取文件并测试每个文件是否存在。您还可以将files.txt中的所有文件名读入数组,然后根据需要循环遍历数组。是的,上面的内容可以是一个脚本。
答案 1 :(得分:1)
你真的在使用#!/bin/sh
吗?在什么情况下?一个旧的Unix环境,或现代的,精简的环境与最小的cmds?
您可以使用#!/bin/bash
或#!/bin/ksh
吗?这将使它更容易。
但是在任何shell中都可以使用
while read line ; do if [ -f "$line" ] ; then echo "$line" ; fi ; done < files.txt
这应该允许文件/路径中包含空格,但如果文件名中嵌入了其他奇数字符,则可能需要更多工作。
IHTH