ssh user@server "sudo tar -czf - -C /path/To/Directory *.properties" | tar xzf -
失败并出现以下错误 -
tar:* .properties:无法统计:没有这样的文件或目录
tar:由于之前的错误而退出失败状态
如果我ssh到服务器然后在服务器上,而不是tar -czf -
使用tar -czf abc.tgz
并在最后删除管道命令,它可以正常工作,即压缩目录中的所有.properties文件?< / p>
我尝试过使用--wildcards参数和-P以及以* .properties结尾的完整路径,但它们也没有用。
答案 0 :(得分:3)
远端的shell在执行package com.dcdeveloper.fihresults;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
/**
* Fragment contenente le partite del campionato,disposte in giornate
* Use the {@link PagePartite#newInstance} factory method to
* create an instance of this fragment.
*/
// In this case, the fragment displays simple text based on the page
public class PagePartite extends Fragment implements AdapterView.OnItemSelectedListener{
/** View del frammento*/
protected View view;
private int mPage;
/**URL del WEB Service a cui effettuare richieste HTTP per ottenere i risultati delle partite*/
private String wsURL;
/**ID del campionato scelto*/
private static int idcampionato;
/**Layout che consente l'aggiornamento della pagina tramite swipe verticale*/
SwipeRefreshLayout mSwipeRefreshLayout;
/**Barra di progresso mostrata quando c'e una attesa nel caricamento dei dati*/
ProgressBar progressBar;
/**Spinner per scegliere la giornata del campionato di cui visualizzare le partite*/
Spinner spinner;
/**RecyclerView contenente le Card delle partite*/
RecyclerView recyclerList;
/**Giornata del campionato scelta*/
private int giornata;
/**
* Inizializza il fragment con il campionato scelto.
* @param IDCampionato Il campionato scelto
* @return Fragment il fragment PagePartite
*/
public static Fragment newInstance(int IDCampionato) {
PagePartite fragment = new PagePartite();
idcampionato=IDCampionato;
return fragment;
}
/**
* Costruttore vuoto richiesto
*/
public PagePartite(){
//required empty public constructor
}
/**
* Funzione che inizializza i dati del Fragment
* @param savedInstanceState
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* Funzione che crea la grafica del Fragment definito nella funzione newIstance.Inizializza la RecyclerView con le View delle Card, lo SwipeRefreshLayout
* @param inflater Layout utilizzato per creare la grafica
* @param container Container del Fragment
* @param savedInstanceState
* @return View rappresentante il fragment
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//inflates the view inside ViewPager
view = inflater.inflate(R.layout.fragment_partite, container, false);
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.partite_swipe_refresh_layout);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colore_sfondo_menu, R.color.indicator_color, R.color.colore_menu);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
giornata=1;
spinner = (Spinner) view.findViewById(R.id.spinner);
//adding recyclerList and setting its layout
recyclerList = (RecyclerView) view.findViewById(R.id.cardList);
recyclerList.setHasFixedSize(true);
LinearLayoutManager layout = new LinearLayoutManager(view.getContext());
layout.setOrientation(LinearLayoutManager.VERTICAL);
recyclerList.setLayoutManager(layout);
getGiornate();
getPartite();
return view;
}
/**
* Funzione che riceve i risultati delle partite dopo aver effettuato una Richiesta HTTP,e li formatta all'interno di Card
*/
public void getPartite(){
wsURL = "http://fihresults.altervista.org/WebServiceFihResults/service.php";
if(hasConnection(view.getContext())) {
HTTPRequest http=new HTTPRequest() {
@Override
protected void onPreExecute() {
mSwipeRefreshLayout.setRefreshing(true);
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
return super.doInBackground(params);
}
@Override
protected void onPostExecute(String result) {
mSwipeRefreshLayout.setRefreshing(false);
super.onPostExecute(result);
Log.i("INFO getPartite", result);
JSONArray dati = null;
ArrayList partite = new ArrayList();
try {
dati = new JSONArray(result);
for(int i=0;i<dati.length();i++) {
JSONObject jsonobject = dati.getJSONObject(i);
partite.add(new Partita(jsonobject));
}
} catch (JSONException e) {
e.printStackTrace();
}
CardAdapter cardadapt = new CardAdapter(0,partite);
recyclerList.setAdapter(cardadapt);
}
};
http.execute(wsURL, "4", "mostraPartite", "IDCampionato", String.valueOf(idcampionato), "NumGiornata", String.valueOf(giornata));
}
else
Toast.makeText(view.getContext(),"Connessione Internet assente",Toast.LENGTH_LONG).show();
}
/**
* Funzione che effettua una richiesta HTTP per ricevere il numero di giornate del campionato,quindi inserisce tali dati all'interno dello Spinner
*/
public void getGiornate() {
Log.i("INFO PagePartite", "ESEGUO getGiornate()");
wsURL = "http://fihresults.altervista.org/WebServiceFihResults/service.php";
if(hasConnection(view.getContext())) {
HTTPRequest http=new HTTPRequest() {
@Override
protected void onPreExecute() {
if(!mSwipeRefreshLayout.isRefreshing())
mSwipeRefreshLayout.setRefreshing(true);
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
return super.doInBackground(params);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.i("INFO getGiornate",result);
int numgiornate;
ArrayList<String> giornate = new ArrayList();
JSONArray dati = null;
try {
dati = new JSONArray(result);
JSONObject jsonobject = dati.getJSONObject(0);
numgiornate= jsonobject.getInt("NumGiornate");
for(int i=1;i<=numgiornate;i++) {
String riga = "Giornata "+i;
giornate.add(riga);
}
} catch (JSONException e) {
e.printStackTrace();
}
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(view.getContext(),
android.R.layout.simple_list_item_1,giornate);
spinner.setAdapter(adapter);
}
};
http.execute(wsURL, "2", "getMaxGiornate", "IDCampionato", String.valueOf(idcampionato));
spinner.setOnItemSelectedListener(this);
}
else
Toast.makeText(view.getContext(),"Connessione Internet assente",Toast.LENGTH_LONG).show();
}
/**
* Funzione che cambia i dati a seconda della giornata selezionata all'interno dello spinner
* @param parent Parent dello Spinner
* @param view View
* @param position Posizione selezionata all'interno dello spinner
* @param id
*/
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
giornata=position+1;
getPartite();
}
/**
* Funzione che effettua il refresh dei dati della pagina
*/
public void refresh(){
getGiornate();
getPartite();
}
}
之前扩展package com.dcdeveloper.fihresults;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.Log;
import android.view.View;
/**
* Adapter per l'inserimento del frammento in un ViewPager.
* Settato per contenere tre pagine, "Partite","Classifica" e "Statistiche"
* Created by Dario on 06/06/2015.
*
*/
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 3;
private String tabTitles[] = new String[] { "Partite", "Classifica", "Statistiche" };
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
protected int idcampionato=1; //default value
@Override
public int getCount() {
return PAGE_COUNT;
}
/**
* Funzione richiamata quando un Fragment non è inizializzato,come all'avvio dell'applicazione.Restituisce il Fragment creato.
* @param position Posizione in cui creare il Fragment
* @return Fragment appena creato ed inserito nell'Adapter
*/
@Override
public Fragment getItem(int position) {
Fragment fragment=null;
Log.i("MyFragmentPagerAdapter "+(String)getPageTitle(position),Integer.toString(position));
switch(position) {
//when created,cards will get the default value (idcampionato=1)
case 0:
fragment = PagePartite.newInstance(idcampionato);
break;
case 1:
fragment = PageClassifica.newInstance(idcampionato);
break;
case 2:
fragment = PageStatistiche.newInstance(idcampionato);
break;
}
return fragment;
}
/**
* Ritorna il titolo della pagina corrente
* @param position posizione corrente
* @return Charsequence che rappresenta il titolo
*/
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
}
主目录中的* .properties。我猜测user
中没有匹配的文件。
您可能想要的更像是(假设tar
可以访问目录)
~user
或者,使用user
的{{1}}选项,并停止远程shell扩展参数:
ssh user@server 'cd /path/To/Directory && sudo tar -czf - *.properties' \
| tar xzf -