2
我需要查找並替換目錄中所有文件(包括子目錄)的某些字符串。我想我差不多用下面的方法來說明我的一般方法。我在-exec裏面做的不僅僅是這個替換,而是爲了清晰起見刪除了這個。BASH使用FIND和SED查找並替換目錄中的所有文件
#!/bin/bash
#call with params: in_directory out_directory
in_directory=$1
out_directory=$2
export in_directory
export out_directory
#Duplicate the in_directory folder structure in out_directory
cd "$in_directory" &&
find . -type d -exec mkdir -p -- "$out_directory"/{} \;
find $in_directory -type f -name '*' -exec sh -c '
for file do
#Quite a lot of other stuff, including some fiddling with $file to
#get rel_file, the part of the path to a file from
#in_directory. E.g if in_directory is ./ then file ./ABC/123.txt
#will have rel_file ABC/123.txt
cat $file|tr -d '|' |sed -e 's/,/|/g' > $out_directory/$rel_file
done
' sh {} +
有一個問題可能是我試圖編寫文件來管道輸出到。但是,這不是主要/唯一的問題,因爲當我用明確的測試路徑替換它時,我仍然得到錯誤 | sed -e's /,/ |/g'|沒有這樣的文件或目錄 這使我認爲貓$文件的一部分是問題?
任何幫助一如既往地受到大衆的歡迎 - 這只是我寫過的第二個BASH腳本,所以我期望我已經犯了一個相當基本的錯誤!
您是否確定您的目的地目錄存在? 'mkdir -p「$ out_directory」' –
注意引用你的變量:文件名可以包含空格:'cat「$ file」| ...>「$ out_directory/$ rel_file」' –