3

我有这个小脚本,可以列出一些目录路径。我想 mkdir 所有这些路径。

for filename in $(git ls-files | grep .java | grep -v 'com/foo' | sed -e 's/\(.java[^/]*\).java/\1/' | uniq)
do
echo "$filename" | sed -e 's/com\/old\/old/com\/new/' | sed 's/\(.*\)\/.*/\1/'
done

因此创建了新目录... com/old/old = com/new

但我无法让那个 mkdir 工作......我试过......

path=$("$filename" | sed -e 's/com\/old\/old/com\/new/' | sed 's/\(.*\)\/.*/\1/')
mkdir -p "$path"

那只是弄乱了文件内容。

4

1 回答 1

1

您应该能够在一个sed命令中完成所有替换,并且它还可以过滤掉com/foo. 然后将输出通过管道传输到一个while read循环。

git ls-files | grep .java |
        sed -e '/com\/foo/d' -e 's/\(.java[^/]*\).java/\1/' -e 's/com\/old\/old/com\/new/' -e 's/\(.*\)\/.*/\1/' |
        uniq | while read path; do
    mkdir -p "$path"
done

这是如何做你的git mv

git ls-files | grep .java |
        sed -e '/com\/intuit/d' -e 's/\(.java[^/]*\).java/\1/' | uniq | 
    while read path; do
        dir=$(echo "$path" | sed -e 's/com\/old\/old/com\/new/' -e 's/\(.*\)\/.*/\1/')
        mkdir -p "$dir"
        git mv "$path" "$dir"
done
于 2013-11-05T04:17:47.417 回答