2014-06-20 26 views
1

文件的測試存在我有一個文件列表,我想管的命令來測試如果每個文件存在

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

'cat files.txt | command'可以更好地寫爲'command

回答

1

您確實在使用#!/bin/sh?在什麼情況下?一箇舊的Unix env,還是現代的,精簡的env,最小的cmds?

您能使用#!/bin/bash#!/bin/ksh?這將使它更容易。

但在任何殼這應該工作

while read line ; do if [ -f "$line" ] ; then echo "$line" ; fi ; done < files.txt 

這應該允許用空格的文件/路徑,但如果其他奇怪的字符被嵌入在文件名可能需要再更多的工作。

IHTH

1
​​

而且

[[ -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中的所有文件名讀入數組,然後根據需要循環訪問數組。是的,以上可以是一個腳本。

+0

事實上,我把'command'放在我的問題中,這是我要求的命令。你建議'cat files.txt |測試-f'? –

+0

我編輯我的問題更加精確 –