попробуйте это:
find . -type f -name "*.base.coverage.txt" -exec sh -c 'paste {} paste_all_l30.p90.base.cov.norm > tmp ; mv tmp paste_all_l30.p90.base.cov.norm' \;
Странно, что Вы используете sudo
изменить полномочия на файле, даже при том, что это находится в Вашем корневом каталоге. Файл принадлежит Вам? chmod u+w
только дает разрешение записи владельцу файла. Если Вы - владелец, Вам не нужен sudo. Если Вы не владелец, Вам действительно нужно sudo
, но chmod u+w
только дает разрешение записи владельца, оно не дает Вам разрешение для записи в файл. Таким образом, после выполнения chmod u+w
, файл все еще не перезаписываем Вами, который является что [ -w … ]
тесты.
Выполненный ls -l ~/scripts/text.txt
проверять владение и полномочия на файле.
Кроме этого, всегда помещаемые двойные кавычки вокруг подстановок переменных. (Или можно изучить все правила и сделать сценарий трудно для поддержания людьми, которые не знают всех правил.) Раздражающе, $file
в оболочке синтаксис не означает, “принимают значение переменной file
”, это означает, “принимают значение переменной file
, проанализируйте его как список подстановочных шаблонов и замените каждый шаблон списком соответствия файлам, если там соответствуют файлам”. Этот дополнительный материал выключен, если замена происходит в двойных кавычках: "$file"
означает, “принимают значение переменной file
”.
Кроме того, Вам не нужны все эти фигурные скобки.
if [ ! -w "$file" ]
then
sudo chmod u+w "$file" && echo "The file is now writable"
elif [ -w "$file" ]
then
echo "The file is already writable"
fi
С тех пор [ -w "$file" ]
отрицание [ ! -w "$file" ]
, elif
тест будет всегда успешно выполняться, если он будет достигнут. (Если нет состояние состязания, в этом случае elif
тест, который тестирует то же условие снова, может возвратить другой результат, который плох.), Таким образом, Вы можете и должны упростить это до
if [ ! -w "$file" ]
then
sudo chmod u+w "$file" && echo "The file is now writable"
else
echo "The file is already writable"
fi
Вы пропускаете кавычку.
echo "The file is now writable;
Должен быть
echo "The file is now writable";
Теперь, когда Вы зафиксировали это, я думаю, что Вы только изменяете полномочия для root
(не 100%, знакомых с алфавитной схемой полномочий) как u
поддерживает владельца, который является root
.
Можно хотеть попытаться использовать a
или o
, теперь создание строки
then { sudo chmod a+w $file; } && { echo "The file is now writable"; }
Дополнительные вещи: можно хотеть exit 1
когда файл не существует.
Протестировано с помощью приведенного ниже сценария, все работает нормально
Приведенный ниже сценарий будет проверять условие записи для текущего пользователя, вошедшего в систему, если разрешения на запись не было, он добавит разрешение на запись, только если владельцем файла является тот же текущий пользователь, вошедший в систему
Если вы хотите разрешить запись всем, используйте sudo chmod a+w path
#!/bin/bash
path="/scripts/text.txt"
if [[ -f $path ]]
then
echo "$path file exsists"
if [[ -w $path ]]
then
echo "$path file is writable"
else
echo "$path file is not writable"
echo "Now we are adding write acess to the file"
chmod u+w $path
if [[ -w $path ]]
then
echo "$path file is writable now"
fi
fi
else
echo "$path file doesnt exsists"
fi
Попробуйте использовать приведенный ниже код.
#!/bin/bash
file=~/scripts/text.txt
# To check existence of the file
[ -e $file ] && E="The file exists" || E="The file does NOT exists"
echo "$E"
# checking whether the file is writable or not and changing permissions
[ -w $file ] && F="The file is already Writable" || F="The file is now Writable"
chmod u+w $file
echo "$F"