Сменить каталог без использования cd [закрыто]

Предположительно файл .bash_history начинается с нетекстовых данных, поэтому grep обрабатывает файл как двоичный. Это подтверждается выводом файла .bash_history :

.bash_history: data 

Вы можете прочитать несколько байтов с самого начала, чтобы получить соответствующее представление:

head -c1K .bash_history 

Здесь я читаю первый 1 КиБ.

STDOUT можно направить в шестнадцатеричный дамп / od или аналогичный.


Кстати, grep принимает в качестве аргумента имена файлов, поэтому cat здесь бесполезны; попробуйте следующее:

grep git .bash_history
2
28.05.2016, 20:59
2 ответа

как я могу изменить каталог, просто передав ../ команде cp

Вы не можете передать аргумент "изменить каталог" (сравнимый с опцией -C в tar, например) ни в одной версии cp, которую я когда-либо видел. Ранее я предлагал просто выполнить cd в сценарии оболочки, прежде чем выдать команду cp, но это тоже было сочтено бесполезным.

-1
27.01.2020, 23:10

Вот мои предположения:

Структура файлов на прежнем месте:

..
├── app
│   ├── code
│   ├── design
│   ├── etc
│   └── locale
│   └── ...
├── script.d
│   ├── file.list
│   ├── script.sh
└── skin
    └── frontend
    └── ...

file.list - имя файла, содержащего список файлов для копирования. script.sh - это следующий скрипт.

#! /bin/bash

distDir="THE NEW DIRECTORY PATH" # <<<<<< Alter this line

for filePath in $(cat "file.list");
do
    len=$(wc -c "$filePath")
    newFilePath=$(cut -c4-$len "$filePath")

    tempFileName=$(grep -Po '[^/]+$' "$filePath")

    path=$(grep -Po '^.*/' "$newFilePath")

    newPath=$distDir

    for dir in $(echo "$path" | tr / '\n');
    do

        if [ $(ls "$newPath" | grep -P '^'$dir'$' | wc -l) = 0 ]
        then
            mkdir "$newPath"'/'"$dir"
            newPath="$newPath"'/'"$dir"
        fi

    done

    cp "$filePath" "$newPath"'/'
done

Убедитесь, что вы указали правильный путь в первой строке.

-1
27.01.2020, 23:10

Теги

Похожие вопросы