我知道这个用于对一个目录中的所有文件执行操作的 bash 代码:
for files in dir/*.ext; do
cmd option "${files%.*}.ext" out "${files%.*}.newext"; done
但现在我必须对一个目录中的所有文件和另一个目录中具有相同文件名但不同扩展名的所有文件执行操作。例如
directory 1 -> file1.txt, file2.txt, file3.txt
directory 2 -> file1.csv, file2.csv, file3.csv
cmd file1.txt file1.csv > file1.newext
cmd file2.txt file2.csv > file2.newext
我不能比较两个文件,但我必须执行的脚本需要两个文件来生成另一个文件(特别是我必须执行
bwa samsa path_to_ref/ref file1.txt file1.csv > file1.newext
)
你能帮帮我吗?
感谢您的回答!
最佳答案
在 bash 中使用变量操作:
$ for f in test/* ; do t="${f##*/}"; echo "$f" test2/"${t%.txt}".csv ; done
test/file1.txt test2/file1.csv
test/file2.txt test2/file2.csv
test/file3.txt test2/file3.csv
编辑:
实现@DavidC.Rankin 的保险建议:
$ touch test/futile
for f in test/*
do
t="${f##*/}"
t="test2/${t%.txt}".csv
if [ -e "$t" ]
then
echo "$f" "$t"
fi
done
test/file1.txt test2/file1.csv
test/file2.txt test2/file2.csv
test/file3.txt test2/file3.csv
关于linux - Bash如何对两个目录中的文件执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47991011/